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 값이 있다.