[Java] 상수(Constants)
상수는 값이 변하지 않는 수를 의미한다.
그러나 자바에서는 한번 그 값이 정해지면 이후로는 변경이 불가능한 변수도 상수라 일컫는다.
1. 일반적 상수
변수 선언 시 앞에 final 추가하면 그 변수는 상수가 되며, 다음과 같은 특성 지니게 됨
1) 값을 한 번만 할당할 수 있다.
2) 한 번 할당된 값은 변경이 불가하다.
# 참고 : 상수의 이름은 모두 대문자로 짓는 것이 관례이며, 띄어쓰기는 언더바(_)를 넣는다.
2. Literal 상수
int num = 123; // 숫자 123은 리터럴 상수(혹은 그냥 '리터럴' or '상수')
컴파일러는 숫자 123을 항상 int형 정수로 인식한다.
이는 num을 int로 선언했기 때문일까? 결론부터 말하자면 아니다.
숫자 1111111111은 int형 정수로만 인식될 수 있는데, 값이 너무 크기 때문에 오류가 발생한다.
그럼 이렇게 범위를 넘어서는 큰 값은 어떻게 표현할까?
위와 같이 정수를 할당할 때 끝에 long 형임을 나타내는 'L'을 붙여주면 오류 없이 정상 작동한다.
3. 정수형 상수 표현
정수는 8진수, 10진수, 16진수로 나타낼 수 있다.
8진수 : 숫자 앞에 0 삽입하여 표현
16진수 : 숫자 앞에 0x 혹은 0X 삽입하여 표현
10진수는 누구나 알고 있으니 넘어가겠다.
Java는 byte, short 형의 정수 표현 방법을 제공하지 않는다.
즉, 다음과 같은 덧셈을 진행할 때 이는 항상 int로 인식되고 int로 덧셈이 이루어진다.
System.out.println(1 + 2 + 3);
하지만 아래와 같은 초기화는 허용한다.
byte num1 = 1;
short num2 = 10;
3. 정수형 상수 관련 추가 기능
1) 2진수 표현 가능
int eight = 0B1000;
2) 중간 언더바 삽입 가능
int num = 1000_0000_0000;
넣고 싶은 곳에 얼마든지 가능하다.
큰 수의 단위 인식을 편리하게 할 때 이용할 수 있다.
4. 실수형 상수
실수형 상수는 기본적으로 double 형으로 인식된다.
double a = 1.2345; // 1.2345는 실수형 상수
두 실수가 double로 표현된 상수임을 명시하고 싶다면
이렇게 뒤에 D혹은 d를 붙일 수 있다.
마찬가지로 float 임을 표시하고 싶다면 뒤에 F 혹은 f를 붙이면 된다.
5.0000222가 아닌 5.0000224가 출력되었다.
> 위 두 실수는 float 형의 정밀도로 계산하기에는 적절치 않기 때문
ex) 1.2e3 -> 1.2x10^3
ex) 1.2e-3 -> 1.2x10^-3
위와 같이 e를 이용해서 표현할 수도 있다. 물론 이들도 double이다.
double이나 float임을 표시하기 위해 뒤에 d 혹은 f 등을 붙일 수도 있다.
ex) 1.2e3f
앞 또는 뒤에 붙은 숫자 0을 생략할 수도 있다.
ex) 1.0 -> 1.
0.22 -> .22
0.7f -> .7f
10.0f -> 10.f
5. 부울형 상수와 문자형 상수
boolean형이 가질 수 있는 값은 true, false 두 가지이고, 이들이 boolean형 상수의 전부다.
문자형 상수는 'a', 'b', '가', '나' 등으로 표현한다.
이외에 escape sequence 라는 것이 존재하는데, 이는 Unicode 문자 중 키보드로 입력하기 어려운 문자의 표현을 위한 것이다.
'\b' : backspace
'\t' : tap
'\\' : backslash
'\'' : 작은따옴표
'\"' : 큰따옴표
'\n' : 행 나누기
'\r' : carriage return(커서를 왼쪽 끝으로 이동시킴)
예제)
\r 의 경우, 커서가 왼쪽 끝, 즉 A 위치로 이동한 뒤 다음 문자열을 출력하므로 위와 같은 결과가 나타난다.
예제)
"오늘의 환율은 1$에 0.92€ 입니다." 를 출력해보자.
유로 기호 표시는 키보드에 존재하지 않는다. 이 때에는 유니코드 값을 16진수로 \u뒤에 덧붙이면 해당 문자가 출력된다.