
- 핵심 개념
애플리케이션 전체에서 단 하나의 인스턴스만 존재하도록 보장하는 패턴입니다.
- 장점
- 전역적인 상태를 관리하거나, 유일해야 하는 시스템 컴포넌트(ex. 설정 관리자)에 유용합니다.
- 단점
- 클라이언트 코드가 싱글턴에 강하게 결합되어 테스트하기 어렵습니다. (의존성 주입으로 완화 가능)
- 상속이 불가능합니다.
💡 예제 비교
❌ 잘못된 예 (public static final 필드 방식)
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public void leaveTheBuilding() { /* ... */ }
}
- 간결하지만, 리플렉션을 통해 private 생성자를 호출하면 여러 인스턴스를 만들 수 있어 싱글턴이 깨질 수 있습니다.
⭕ 잘된 예 (열거 타입 방식)
public enum Elvis {
INSTANCE; // 단 하나의 인스턴스
public void leaveTheBuilding() { /* ... */ }
}
- 가장 좋은 방법. 코드가 매우 간결합니다.
- 복잡한 직렬화나 리플렉션 공격에도 완벽하게 싱글턴을 보장합니다.
'Language > Java' 카테고리의 다른 글
| Effective Java 2장 - Item7: 다 쓴 객체 참조를 해제하라 (0) | 2025.06.15 |
|---|---|
| Effective Java 2장 - Item6: 불필요한 객체 생성을 피하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item4: 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item2: 생성자에 매개변수가 많다면 빌더를 고려하라 (1) | 2025.06.10 |
| Effective Java 2장 - Item1 : 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2025.06.10 |