Java, final 상수
자바에서 final 키워드로 활용 하는 상수에 대해서 알아본다.
상수(Constant) 용어
- 상수는 변하지 않고, 일정한 값으로 유지하는 숫자.
자바에서는 단 하나의 고정된 값을 갖고 있는 것을 상수라 한다.
이러한 이유로 자바에서 상수를 선언시 static, final
키워드를 사용한다.
자바 상수의 특징은?
static, final
키워드를 사용- 대문자로 사용하고 문자 구분은 언더스코어(_)로 사용하고 있다.
- 일반 변수와 상수 구분하기 위함.
- 필드를 직접 접근하여 사용
- 상수는 고정된 값 사용하는 것이 목적
- 상수는 값을 변경 불가능하므로 직접 접근해도 값이 변경될 일이 없다.
Constant.java
package finalLocal;
public class Constant {
// 수학 상수
public static final double PI = 3.14;
//시간 상수
public static final int HOURS_IN_DAY = 24;
public static final int MINUTES_IN_HOUR = 60;
public static final int SECONDS_IN_MINUTE = 60;
// 애플리케이션 설정하는 상수
public static final int MAX_CONNECTION_USERS = 200;
}
- 애플리케이션은 수학 상수, 시간 상수, 설정 상수 등 다양 한 상수들이 존재한다.
- 규모가 큰 애플리케이션은 상수들을 전반에서 사용하므로 public 접근 제어자를 사용한다. 특정 위치를 사용할 경우 다른 접근 제어자로 사용하기도 한다.
- 상수는 중앙에서 값들을 관리하는 장점이 있다.
- 상수는 런타임 도중에 값이 변경될일이 없다. 프로그램 시작 시 종료까지 값을 유지한다.
상수 활용 예시
다음과 같이 프로그램의 최대 인원 수를 1000명으로 조절하고 그 이후로는 대기자로 등록하는 코드이다.
ConstantMain1.java
package finalLocal;
public class ConstantMain1 {
public static void main(String[] args) {
System.out.println("가용 인원 : " + 1000);
int currentUserCount = 999;
process(currentUserCount++);
process(currentUserCount++);
}
private static void process(int currentUserCount) {
System.out.println("참여자 수 " + currentUserCount);
if (currentUserCount > 1000) {
System.out.println("게임 대기자로 등록되었습니다.");
} else {
System.out.println("게임에 참여합니다.");
}
}
}
출력결과
가용 인원: 1000
참여자 수 999
게임에 참여합니다.
참여자 수 1000
게임에 참여합니다.
참여자 수 1001
게임 대기자로 등록되었습니다.
여기서 살펴보면 매직 넘버 1000 숫자가 있는데, 이 매직 넘버가 무엇인지 확인할 필요가 있다.
새로 온 개발자에게는 코드를 살펴봐야 한다. 살펴 본 매직 넘버가 최대 인원 수라는 것을 찾아내는 시간이 사람마다 다르다. 이럴 때 상수를 제공하여 문맥으로 개발 코드가 무엇인지 알려주도록 하는 것을 권장하고 있다.
💡
Magic Number: 개발자를 놀래게 하는 숫자.
유명한 숫자로는 퀘이크3의 하드코딩된 숫자 0x5f3759df 값이 있다.
유명한 숫자로는 퀘이크3의 하드코딩된 숫자 0x5f3759df 값이 있다.