compile-time_constant
compile-time_constant
package com.github.sejoung.codetest.singleton;
class OldSingleton {
//compile-time constant
final static String NAME = "OldSingleton";
final static String NAME = new String("OldSingleton");
final static OldSingleton INSTANCE = new OldSingleton();
private OldSingleton() {
System.out.println("hi");
}
}
위에 코드에서 아래의 변수를 선언하면 compile-time constant라고 하는데 컴파일 시점에 상수를 참조 하고 있는 값을 상수 내부의 값으로 바꿔준다.
final static String NAME = "OldSingleton";
그래서 아래의 코드를 찍어 보면
package com.github.sejoung.codetest.singleton;
public class SingletonTest {
public static void main(String[] args) {
System.out.println("1======================");
System.out.println(OldSingleton.NAME);
System.out.println("2======================");
OldSingleton oldSingleton1 = OldSingleton.INSTANCE;
System.out.println("3======================");
OldSingleton oldSingleton2 = OldSingleton.INSTANCE;
System.out.println("4======================");
System.out.println(oldSingleton1 == oldSingleton2);
}
}
아래 처럼 static 변수를 선언해서 가지고 와도 싱글톤 객체가 참조 되는 순간 new되는 것 처럼 보인다.
1======================
OldSingleton
2======================
hi
3======================
4======================
하지만 위에서 말했듯이 compile-time constant라서 정상인것처럼 보였지만 코드를 아래 처럼 변경 해주면
final static String NAME = new String("OldSingleton");
아래 처럼 OldSingleton.NAME 참조 되는 순간 객체가 생성 되는 것이 보인다.
1======================
hi
OldSingleton
2======================
3======================
4======================
true