안녕하세요, 여행벌입니다.

 이번 포스팅에서는 리터럴(Literals)이 무엇이고 자바에서는 숫자를 어떻게 보기로 약속했는지, 그에 따라 앞에서 다룬 double, float, long 같은 자료형을 어떻게 활용할 수 있는지에 대해 다뤄보겠습니다.


리터럴(Literals)


int num = 157;

위의 코드에서 대입 연산자의 오른편에 위치한 숫자 157을 가리켜 '리터럴' 또는 '리터럴 상수'라고 합니다.

 

자바의 정수 표현에는 byte, short, int, long 네 가지 표현 방법이 있는데 그러면 정수형 리터럴 상수를 컴파일러는 어떻게 인식할까요?? 또, 실수 표현에도 float, double 두 가지 표현 방법이 있는데 실수형 리터럴 상수를 어떻게 인식할까요? 이렇듯 숫자를 접했을 때 이를 '무엇으로 인식할지에 대한 일종의 약속'이 필요하고, 이 약속에 근거하여 표현된 숫자를 '리터럴' 또는 '리터럴 상수'라고 합니다.


정수형 리터럴(Literals)


 자바에서는 정수형 숫자들은 모두 int 형으로 인식합니다. 저번 포스팅에서 다룬 '자바는 정수형 연산을 기본적으로 int형으로 진행한다' 와 같은 맥락입니다. 따라서, 다음과 같은 상황은 오류가 발생합니다.

long num = 999999999999; // int 형 범위를 넘어가는 리터럴상수

 위의 리터럴 상수는 int 형 범위를 벗어나지만, long 형 범위를 넘어가지는 않는 상수입니다. C언어나 C++ 에서는 다음과 같이 선언하면 전혀 문제가 되지 않지만, 자바에서는 기본적으로 int 형으로 인식하기 때문에 에러가 발생합니다. 따라서, int 형 범위를 벗어나는 숫자를 다루고 싶다면 다음과 같이 숫자 끝에 'L' 또는 'l' 을 붙여서 long 형 정수로 봐달라고 표현해줘야 컴파일러가 제대로 인식을 할 수 있습니다.

long num = 99999999999L;

 자바는 byte형과 short형 정수의 표현 방법을 제공하지 않기 때문에 byte형과 short 형은 아래와 같이 그냥 int 형으로 초기화를 할 수 있습니다. 또, 연산을 byte 형이나 short형으로 진행하는 방법은 없습니다.

byte num = 2;
short num = 5;

 자바는 int 형 정수를 2진수, 8진수, 16진수로 표현할 수 있습니다. 숫자 앞에 2진수는 '0B' 또는 '0b'  , 8진수는 '0', 16진수는 '0x' 또는 '0X' 를 붙여서 표현할 수 있습니다.

int num = 0B11; // 2진수 11 -> 3
int num = 011; // 8진수 11 -> 9
int num2 = 0X11; // 16진수 11 -> 17

 또, 자바는 단위가 큰 수의 표현 및 인식에 도움을 주기 위해서 숫자 중간에 언더바를 넣는 것도 허용합니다.

int num = 999_999_999; // 999999999를 의미

실수형 리터럴(Literals)


 자바에서 실수형 숫자들은 모두 double 형으로 인식합니다. 따라서, float 형으로 표현하고 싶다면 숫자 뒤에 'f' 또는 'F'를 붙여서 표현해줘야 합니다.

float num = 3.005F; // float형
double num = 3.005; // double형

 따라서, 다음과 같은 표현은 에러가 발생합니다.

float num = 3.005; // 실수는 기본적으로 double 형으로 인식한다.

 

 

+ Recent posts