변수 : 하나의 값을 저장할 수 있는 메모리 공간
변수를 선언하면 메모리가 할당됨
▶변수의 선언
타입 변수이름
int age
double value
▶변수명명규칙
첫번째 글자에 올 수 있는 특수문자는 '$','_' 두개뿐
숫자로 시작할 수 없음
대소문자 구분
(관례)첫문자는 영어소문자로 시작, 다른 단어가 붙을 경우 대문자로 시작
※ 카멜 기법 : 앞단어의 첫글자는 소문자, 뒷단어의 첫글자는 대문자
변수란, 데이터를 담을 수 있는 메모리 공간을 의미
자바에서는 데이터를 담을 수 있는 메모리 공강을 할당 받기 위하여
변수를 선언해야 한다.
자바에서 변수는 반드시 데이터 타입이 존재한다.
정해진 타입의 데이터만 변수에 담길 수 있다.
변수 선언 문법)
데이터타입 변수이름;
대표적인 데이터 타입
1. 정수 : int
2. 실수 : double
3. 문자 : char -> 한글자
4. 문자열 : String
변수에 값을 대입하는 방법은 대입기호인 =을 사용한다.
= 기준 오른쪽에 있는 값을 왼쪽 변수에 대입한다.
String은 ""
char는 ''
변수를 선언한 후 초기값을 대입하지 않은 상태
즉, 쓰레기값을 갖는 변수는 읽을 수 없다.
<변수에 값을 대입 가능한 시점>
1. 변수를 선언한 이후 값을 대입할 수 있다.
int number;
number = 10;
2.변수 선언과 동시에 값을 대입할 수 있다.
int number = 10;
정수
리터럴이란,소스코드 상에 직접적으로 적혀있는 데이터를 의미
프로그래머가 직접 입력한 값
<리터럴 데이터 타입 종류>
1.정수형 : 소수점 없는 숫자 음수 양수
2.실수형 : 소수점 존재하는 숫자 음수 양수
3.문자열형 : 하나 이상의 문자들로 이루어진 값
4.논리형 : 참, 거짓을 나타내는 값
5.문자형 : 하나로 이루어진 문자 값
<자바에서 다루는 기본 데이터 타입 종류>
1.정수 타입
1)byte(1byte) : 8bit -128~127
2)short(2byte) : 16bit -32,768~32,767
3)char(2byte) : 16bit 0~65535(유니코드)
유니코드가 정수로 이루어져있으며
0부터 시작하기때문에 16bit전부 양의 정수값을 표현
4)int(4byte) : 32bit -2,147,483,648~2,147,483,647
5)long(8byte) : 64bit -9,223,372,036,854,775,808
~9,223,372,036,854,775,807
※ 메모리 크기의 맨 앞자리는 부호를 나타냄. 0 = 양수, 1 = 음수
리터럴도 리터럴 값을 담는 임시 그릇이 존재하며 임시 그릇의
데이터 타입은 정수는 기본 int 이다.
리터럴이 int보다 넘치는 값의 경우
임시그릇의 데이터타입을 long으로 변경해줘야 한다.
리터럴 뒤 영문 l 또는 L 키워드를 사용하면 리터럴 타입 변경이 가능하다.
공간을 확장하기 위해 !
문자 -> 기계어 : 인코딩
기계어 -> 문자 : 디코딩
char타입은 값의 대입을 문자 또는 양의 정수를 대입할 수 있다.
하지만 값을 출력할 때는 무조건 유니코드에 해당하는 문자로
변환하여 출력한다.
'' 문자가 없는 경우는 나타낼 수 있는 유니코드가 없기 때문에
char 타입에 값으로 대입할 수 없다.
' ' 공백에 대한 유니코드값은 존재하기 때문에
char 타입에 값으로 대입할 수 있다.
문자열타입은 빈문자열 값을 대입할 수 있다.
실수
1)float(4byte) : 유효 소수 이하 자리 7자리
2)double(8byte) : 유효 소수 이하 자리 15자리 자바에서 실수 기본타입
실수타입은 bit 를 지수부와 가수부로 나눠 저장(부동소수점)
맨 앞자리 1칸은 부호를 다룸. 0은 양수, 1은 음수.
지수부는 3.14의 경우 10의 -2승(정수가 되기위해 소수점 2자리 이동하기때문)
소수점을 다루는 부분
가수부는 314를 2진수로 변환하여 저장
값을 다루는 부분
그렇기 때문에 실수연산은 정확한 연산을 할 수 없음
실수 리터럴의 기본타입은 double이므로 더 작은 float 타입 변수에 값을
대입할 경우 데이터 유실이 생길 수 있으므로 컴파일러가 오류를 낸다.
강제로 float에 대입하는 방법은 값 오른쪽에 f 또는 F 키워드를 작성한다.
보다 작은공간에 넣는거!
보다 정밀하게 표현하기 위해 부동소수점을 사용
부동소수점을 사용하는 실수형은 정확한 값을 갖지 않고
얼추 그쯤에 해당하는 소수점을 갖기 때문에 정확한 연산은 불가능하다.
e 또는 E가 포함된 10의 거듭제곱 리터럴
e 뒤에 양수일 경우 오른쪽으로 그 숫자만큼 이동
e 뒤에 음수일 경우 왼쪽7으로 그 숫자만큼 이동
ex) 5e2 = 5.0 x 10의 2승 = 500.0
0.12e-2 = 0.12 x 10의 -2승 = 0.0012
int 값은 실수에 담을 수 있음!
자바 13버전부터 가능하기 때문에 안되는곳도 있음(사용안된다고 보기)
String str = """
""";
-> 큰따옴표 3개로 감싸면 이스케이프하거나 라인피드를 할 필요없이
작성된 그대로 문자열로 저장된다.
논리
- 참과 거짓을 표현할 수 있는 데이터 타입
- boolean 키워드를 사용
- true(참),false(거짓) 리터럴 사용
- 1byte(8bit)
boolean 리터럴에 연산식을 사용하여 true, false 넣을수있다.
boolean result1 = (x == 20);
boolean result2 = (x != 20);
문자열
- 하나 이상의 문자들을 다루는 데이터 타입
- String 키워드 사용
- 리터럴로 표현시 ""(쌍따옴표)로 감싸서 표기
- char 타입에는 절대 문자열 데이터를 담을 수 없다.
- 자바에서 기본타입은 아니다.(참조타입)
- 쌍따옴표로 감싼 문자열 데이터는 반드시 String 타입 변수에 대입
- 홑따옴표로 감싼 문자 데이터는 반드시 char 타입 변수에 대입
<자동타입변환>
작은 허용 범위 타입이 큰 허용 범위 타입에 담길 수 있다.
byte < short, char < int < long < float < double
부동소수점의 지수부를 사용하면 long보다 표현할 수 있는 정수 범위가 더 넓어
long(8byte)가 float(4byte)에 담길 수 있다.
short은 15bit를 사용하여 값을 표현하며 음수, 양수 허용
char는 16bit를 사용하여 양의 정수를 허용
때문에 허용가능한 값의 범위가 같은 2byte지만 다르므로 자동 형변환이 이루어지지 않는다.
<강제타입변환>
- 큰 타입의 값을 작은 타입의 변수에 옮길때 행하는 방법
- 컴파일러는 내부 데이터는 확인할 수 없으므로 큰 그릇의 데이터를
작은 그릇의 데이터로 옮겼을 때 데이터 유실이 발생할 수 있어
컴파일 오류를 낸다. - 이때, 개발자가 데이터 유실이 발생하지 않는 범위의 값인 경우
강제로 형변환을 하는 방법
1) 만약 변환되는 타입의 값 범위보다 넘치는 값을 가지고 있는 경우
데이터가 유실되어 예상값이 담기지 않으므로 강제 형변환은 주의해야 한다
2) 실수 타입을 정수타입으로 강제 형변환하면 소수점을 버립니다.
byte byteValue = (byte) intValue;
<연산식에서의 자동 타입변환>
- 피연산자 중에 더 큰 타입으로 자동 타입변환이 이루어진다.
- 피연산자들의 데이터 타입이 같은 경우
연산의 결과는 각 타입의 기본타입으로 도출된다.
byte bData1 = 10;
byte bData2 = 20;
byte result = bData1 + bData2;
이 경우 결과가 int 이기 때문에 오류가 발생함
정수 나누기 정수 연산은 반드시 정수값으로 결과가 나오기 때문에
실수 연산 결과를 받고자 하면 피연산자 둘중 하나를
실수로 강제형변환해야 한다.
기본타입(int,float 등)을 문자열로 변경할 경우
String.valueOf() 를 사용
'Java' 카테고리의 다른 글
[Java] 논리연산자 (0) | 2024.07.22 |
---|---|
[Java] 산술연산자, 증감연산자, 비교연산자 (0) | 2024.07.21 |
[Java] 자바 시작 (0) | 2024.07.19 |
[Java] BufferedReader, BufferedWriter (0) | 2024.06.29 |
[Java] 숫자로 된 char를 int로 변경 Character.getNumericValue() (0) | 2024.06.28 |