반응형

2개 이상의 Class에서 공통 상수를 정의해서 사용하려고
별도의 class를 하나 만들고
static final로 상수를 설정해서 선언했습니다.

public class UserVar {
	public static final String SITE_ID = "AAA";
}

그런데 이렇게 해서 다른 클래스에서 호출할 경우
컴파일 시점에서 static final 변수가 저장되어
추후 상수 값을 수정할 경우
전체를 다시 컴파일 해야하는 부담이 있더군요..

String siteId = UserVar.SITE_ID; // 컴파일 시점에서 상수 저장됨.

그래서 싱글톤으로 클래스를 다시 만들기로 했습니다.

그래서 Effective Java 2nd Ed. (Joshua Bloch 著)을 보다보니
JDK 1.5 이상에서 열거형 싱글톤을 만드는 방법이 나왔습니다.

public enum UserVar {
	INSTANCE;
	public String SITE_ID = "AAA";
}

클래스 대신 enum 형으로 만들고
INSTANCE를 선언해주면 되더군요..

호출할 때에는 인스턴스를 불러와서
변수를 불러오면 됩니다.

UserVar userVar = UserVar.INSTANCE;
String siteId = userVar.SITE_ID; // 런타임 시점에서 변수 저장됨.

이렇게 하면 싱글톤 속성을 유지하며
변수를 바꾸더라도 런타임 시점에서 변경된 값을 곧바로 사용할 수 있습니다.

작게나마 도움 되시길 ^^

P.S. 위 방법은 JDK 1.5 이상에서만 가능합니다.
1.5 미만에서는 public final 필드(INSTANCE)를 갖거나
static 팩토리 메소드 (getInstance)를 갖는 싱글톤 선언을 해줘야 함.
반응형

+ Recent posts