1. 상수(constant)
상수(constant)는 변수처럼 '값을 저장할 수 있는 공간'이지만, 변수와 달리 값을 저장하면 다른 값으로 변경할 수 없다.
상수를 사용함에 있어 몇 가지 조건이 필요한데 다음과 같다.
1. 선언하는 방법은 변수의 타입 앞에 'final'을 붙여주면 된다.
2. 상수는 반드시 선언과 동시에 초기화해야 한다.
3. 초기화 이후, 상수의 값은 변경할 수 없다.
ex)
final int MAX_SPEED; // 에러. 상수는 선언과 동시에 초기화해야함
final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언 & 초기화
MAX_SPEED = 20; // 에러. 상수의 값은 변경할 수 없음
* 상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례이며, 여러 단어일 경우 '_'로 구분한다.
2. 리터럴(literal)
우리가 기존에 알고 있던 '상수'의 다른 이름
* 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문.
변수(vairable) : 하나의 값을 저장하기 위한 공간
상수(constant) : 값을 한 번만 저장할 수 있는 공간
리터럴(literal) : 그 자체로 값을 의미하는 것
3. 리터럴의 타입과 접미사
변수에 타입이 있는 것처럼 리터럴에도 타입이 있다.
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101, 077, 0xFF, 100L | L |
실수형 | 3.14, 3.0e8, 1.4f, 0x1, 0p-1 | f, d |
문자형 | 'A', '1', '\n' | 없음 |
문자열 | "ABC", "123", "A", "true" | 없음 |
10진수 외 2, 8, 16진수를 표현하려면 아래와 같이 리터럴 앞에 접두사를 붙인다.
* 16진수의 경우, 접두사가 '0x'면 'a~f'로, '0X'면 'A~F'로 표현된다.
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; // long big = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL; // long hex = 0xFFFFFFFFFFFFFFFFL;
실수형에서는 float 타입에는 접미사 'f' 또는 'F'를, double 타입에는 'd' 또는 'D'를 붙인다.
* 실수형에서는 double 타입이 기본 자료형이라 접미사 'd'는 생략이 가능하다.
float pi = 3.14f; // 접미사 f 대신 F를 사용해도 된다.
double rate = 1.618d; // 접미사 d 대신 D를 사용해도 된다.
float pi = 3.14; // 에러. float 타입 변수에 double 타입 리터럴 저장 불가
double rate = 1.618; // 접미사 d는 생략할 수 있음
리터럴에 소수점이나 10의 제곱을 나타내는 기호 E 또는 e, 그리고 접미사 f, F, d, D를 포함하고 있으면 실수형 리터럴로 간주한다.
자료형 | 실수형 리터럴 | 다른 형태의 동등한 표현 |
double | 10. | 10.0 |
double | .10 | 0.10 |
float | 10f | 10.0f |
float | 3.14e3f | 3140.f |
double | 1e1 | 10.0 |
double | 1e-3 | 0.001 |
참고문헌 : 남궁성(2016), Java의 정석, 도우출판