안녕하세요, 여행벌입니다.
이번 포스팅에서는 리터럴(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 형으로 인식한다.
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] #6 자바 단항 연산자 - travelbeeee (0) | 2020.03.17 |
---|---|
[JAVA] #5 자바 이항 연산자 - travelbeeee (0) | 2020.03.16 |
[JAVA] #4 자바 형 변환 - travelbeeee (0) | 2020.03.13 |
[JAVA] #2 자바 상수 ( final ) - travelbeeee (0) | 2020.03.13 |
[JAVA] #1 자바 변수와 자바 자료형의 종류 - travelbeeee (0) | 2020.03.12 |