Enum 사용하다가 팀원이랑 Enum을 어떻게 잘 써야하는가 이야기가 나와서 기록 Enum을 이용한 구현 방식 중 Enum Singltone에 대해서 알아봄 ✅ Singleton(싱글톤) 패턴은 클래스의 인스턴스를 하나만 생성
✅ 단 1개의 인스턴스만을 가져야하는 경우 사용 (Spring Application/DB 커넥션 등)
✅ 그럼에도 멀티스레드/리플렉션 사용 시 싱글톤이 보장되지 않을 수 있음
Enum 자체가 단 1개의 인스턴스만을 구현하도록 설계Enum은 JVM에서 1회만 로드Enum은 리플렉션을 통한 생성자 호출 불가따라서 완벽한 싱글톤 패턴을 보장
public enum SingletonEnum {
INSTANCE; // 싱글턴 인스턴스
public void showMessage() {
System.out.println("Hello from Singleton Enum!");
}
}
```java
public class Main {
public static void main(String[] args) {
SingletonEnum singleton = SingletonEnum.INSTANCE;
singleton.showMessage(); // 출력: Hello from Singleton Enum!
}
}
✅ DB 커넥션/설정/캐싱 등 1회성 정보를 계속 가져야하는 경우 추천
✅ 멀티 스레드 환경 (Thread-safe 구현 불필요)
✅ 리플렉션 호출을 방지해야하는 경우
❌ 인스턴스를 미리 로드할 필요가 없는 경우 (Lazy Initialization)
❌ 스프링 프로젝트 전반...
스프링은 Singletone Bean 구현으로 DI가 필요한 경우가 많은데 Enum Singletone은 그런게 불가능
❌ 별도 상태가 필요한 경우
Enum은 상태를 유니크하게 관리하기 위해서도 많이 쓰는데 상태 관리 불가