Theme. 변수, 상수, 리터럴의 구분
변수(variable): 하나의 값을 저장하기 위한 공간
상수(constant): 한 번만 값을 저장할 수 있는 변수
리터럴(literal): 그 자체로 값을 의미하는 것
일반적으로 우리가 아는 상수가 자바에서는 리터럴을 의미하는데, 보다 확실한 구분을 위해 아래 예를 살펴보자.
색을 달리하여 구분해보자면, 변수 / 상수 / 리터럴
int score = 100;
score = 200;
final int MAX = 100; //final을 붙여서 상수임을 나타냄
MAX = 200; // 에러 발생
char ch = 'A';
String str = "abc";
Theme. 리터럴의 접두사와 접미사
| 종류 | 리터럴 | 접미사 |
| 논리형 | false, true | 없음 |
| 정수형 | 123, 0b0101, 077, 0xFF, 100L | L(long을 의미) |
| 실수형 | 3.14, 3.0e8, 1.4f, 0x1.0p-1 | f(float), d(double, 생략가능) |
| 문자형 | 작은 따옴표 안, 'A', '1', '\n' | 없음 |
| 문자열 | 큰 따옴표 안 "ABC", "123", "A" | 없음 |
추가적인 설명을 하자면,
변수에 값을 저장하기 위해서 변수의 타입과 리터럴의 타입을 일치시켜야 하고,
byte b = 127;
byte b = 128; //에러
왜냐하면, byte는 -127 ~ 128의 리터럴만 변수에 저장할 수 있다.
0b0101에서 앞의 "0b"는 2진 접두사로 이진수를 나타낼 때 사용한다.
같은 논의로
0100에서 맨앞 '0'은 8진수를,
0x100에서 앞의 "0x"는 16진수를 나타낼 때 사용한다.
long l = 10_000_000_000L; // 100억은 long 타입의 리터럴로 반드시 뒤에 L을 붙여줘야 한다.
int는 20억까지 가능하므로 int l = 10_000_000_000은 불가능하다.
float f = 3.14f; // f 생략 불가능
double d = 3.14d; // d 생략 가능
즉, 리터럴이 실수형인데 f가 안붙으면 double로 간주하게 된다.
아래 리터럴들의 타입에 대해 알아보자
10. - > 10.0
.10 - > 0.10
둘다 double
10f - > 10.0f로 float
1e3 - > e는 10^n을 의미하고, 즉 1 * 10^3이므로 1000.0을 의미(double타입)
Theme. 변수와 리터럴의 타입 불일치
변수는 그릇, 리터럴은 물건처럼 생각해보자
1. 범위가 "변수 > 리터럴"인 경우, 가능!
int i = 'A'; // 변수(int) > 리터럴(char), ASCII 코드와 관련있는데, A의 ASCII 코드 값은 65다.
long l = 123; // 변수(long) > 리터럴(int)
double d = 3.14f; // 변수(double) 리터럴(float)
2. 범위가 "변수 < 리터럴"인 경우, 에러 발생
int i = 30_0000_0000; // int의 범위 (-20억 ~ 20억) 벗어남
long l = 3.14f; // long이 8byte이고, float가 4byte이지만, 실수형이 정수형보다 저장범위가 커서 에러 발생
float f = 3.14; // 3.14는 double이므로 float < double이어서 에러 발생
'Java > 자바의 정석 정리' 카테고리의 다른 글
| Data Type(값의 타입) (0) | 2023.01.17 |
|---|---|
| 문자와 문자열 (0) | 2023.01.16 |
| 변수(variable) (0) | 2023.01.03 |