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

+ Recent posts