[220714] Java 회고

archymi·2022년 7월 14일
0

문제상황

  • 상수 클래스만 따로 배포하고 싶을때
  • 클래스의 변수를 하나 기준을 잡고 해당 변수로 분기를 태우고 싶을때 (별로 추천하고 싶지 않은 방법이긴하다..)

설명

  • static final 에 관하여..
    다음과 같이 두개의 클래스가 있다.
    BaseDayTest 는 BaseDay의 값을 가져와서 출력하는 단순한 프로그램이 있다고 하자.
public class BaseDay {
    // 기준일자
    public static final String STATIC_FINAL_DAY = "220714";
    public static String STATIC_DAY = "220714";
}

public class BaseDayTest {
    public static void main(String[] args) {
        System.out.println(BaseDay.STATIC_DAY);
        System.out.println(BaseDay.STATIC_FINAL_DAY);
    }
}

이때 당연하게 결과값으로는 다음과 같다.

220714
220714

하지만, 이때 BaseDayTest를 디컴파일러로 돌려보면 다음과 같다.

  • BaseDayTest.class
public class BaseDayTest {
  public static void main(String[] args) {
    System.out.println(BaseDay.STATIC_DAY);
    System.out.println("220714");
  }
}

즉, static final은 컴파일러가 자동으로 치환하여 컴파일 한다는 것을 알 수 있다.

결론

static final 은 컴파일러가 자동으로 치환하여 class파일을 만든다. 따라서, 상수만 따로 배포하는 프로그램을 짜고 싶을때는 static final 보다 단순한 static을 사용하자.
(물론 약간의 성능차이는 발생한다.)

0개의 댓글