<싱글턴을 만드는 방식>
- public static final 필드 방식의 싱글턴
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis(){...}
public void leaveTheBuilding(){...}
}
- 장점
- 클래스가 싱글턴임이 API에 명백히 드러난다는 것
- 간결함
- 정적 팩터리 방식의 싱글턴
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis() {...}
public static Elvis getInstance() {return INSTANCE; }
public void leaveTheBuilding() {...}
}
- 장점
- API를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있다.
- 원한다면 정적 팩터리를 제네릭 싱글턴 팩터리로 만들 수 있다.
- 메서드 참조를 공급자(supplier)로 사용할 수 있다.
- 열거 타입 방식의 싱글턴 - 바람직한 방법
public enum Elvis{
INSTANCE;
public void leaveTheBuilding() {...}
}
- 장점
- 아주 복잡한 직렬화 상황이나 리플렉션 공격에서도 제2의 인스턴스가 생기는 일을 완벽히 막아준다.
'이펙티브 자바 > 2장 객체 생성과 파괴' 카테고리의 다른 글
아이템 6 불필요한 객체 생성을 피하라 (0) | 2023.12.18 |
---|---|
아이템 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2023.12.18 |
아이템 4 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2023.12.18 |
아이템 2 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.12.18 |
아이템 1 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.12.15 |