Java 상수 1

2021. 4. 30. 18:30Java

'상수(Constant)'는 변수와 마찬가지로 값을 저장 할 수 있는 공간이지만 변수와 달리 한번 저장한 값을 저장하면 다른 값으로 변경할 수 없다. 선언방법은 동일하지만 변수앞에 final을 붙여주면된다.


상수가 필요한 이유

그냥 리터럴을 직접 쓰면 될텐데 굳이 상수가 따로 필요한가? 라는 의문이 들 것도 같다. 아래 코드를 확인해보자.

int triangleArea = (20 * 10) / 2;
int rectangle = 20 * 10;
//------After------

final int WIDTH = 20;
final int HEIGHT = 10;
int triangleArea = (WIDTH * HEIGHT) / 2;
int rectangle = WIDTH * HEIGHT;

리터럴의 타입과 접미사

변수의 타입이 있는 것처럼, 리터럴에도 타입이 있다.


리터럴타입의 종류

이름 리터럴 접미사
논리형 false, true X
정수형 123, 0b0101, 077, 0xFF, 100L L
실수형 3.14, 3.0e8, 1.4f, 0x1.0p-1 f, d
문자형 'A', '1', '\n' X
문자열 "ABC", "123", "A", "true" X

정수형과 실수형에는 여러타입이 존재하므로, 리터럴에 접미사를 붙여서 타입을 구분한다. 정수형의 경우 long타입의 리터럴에 접미사 'l'또는 'L'을 붙이고, 접미사가 없으면 int타입의 리터럴이다. byte와 short은 별도로 리터럴타입이 존재하지 않아, byte와 short타입의 변수에 값을 저장할 때는 int타입의 리터럴이 사용한다.

 

10진수 외에도 2, 8, 10 진수로 표현된 리터럴을 변수에 저장할 수 있으며, 16진수라는 것을 표시하기 위해 리터럴 앞에 접두사'0x'또는 '0X'를, 8진수의 경우에는 '0'을 붙인다

 


16진수 - 0x, 0X

8진수 - 0 int

octNum = 010; // 8진수 10, 10진수로 8

int hexNum = 0x10; // 16진수 10, 10진수로 16

int binNum = 0b10; // 2진수 10, 10진수로 2


그리고 JDK1.7부터 정수형 리터럴의 중간에 구분자'_'를 넣을 수 있게 되어서 큰 숫자를 읽을 때 편하게 읽을 수 있게 되었다.


long big = 100_000_000_000L; // big = 100000000000L;

long hex = 0xFFFF_FFFF_FFFF_FFFFL; // long hex = 0xFFFFFFFFFFFFFFFFL;


실수형에서는 float타입의 리터럴에서 접미사'f'또는 'F'를 붙이고, double타입의 리터럴에는 접미사 'd'또는 'D'를 붙인다.


float pi = 3.14f; // 접미사 'f' 또는 'F'가능

double rate = 1.618d; // 접미사 'd' 또는 'D' 가능


정수형에서 int가 기본 자료형 인것 처럼 실수형에서는 double이 기본 자료형이다. float에 'f', 'F'를 안붙여주면 기본자료형인 double타입 리터럴로 인식해버린다. float타입을 사용할 때 습관적으로 뒤에 접미사가 붙었는지 확인 하는 습관이 있어야겠다. 반대로 double타입을 사용할 때는 실수형의 기본자료형이 double이여서 'd', 'D'를 생략해도 된다!

 

Tip. 접미사는 소문자 대문자가 구분 하지 않으므로, 어떤 것을 사용해도 상관은 없지만, 소문자 'l'의 경우 숫자 '1'과 헷갈리기 쉬우므로 대문자인 'L'을 사용하는것이 좋다


'Java' 카테고리의 다른 글

Java 진법 1  (0) 2021.05.25
Java 상수 2  (0) 2021.05.15
Java 화면에서 입력받기(Scanner)  (0) 2021.04.29
Java 변수의 타입  (0) 2021.04.28
Java 변수  (0) 2021.04.27