싱글턴이란?
- 인스턴스를 오직 하나만 생성할 수 있는 클래스
- 설계상 유일해야 하는 시스템 컴포넌트
- 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다
싱글턴 생성 방식 1
- private 기본 생성자를 생성하여 생성자를 외부로 부터 감춘다.
- public static final 필드를 선언하고 필드 변수가 초기화 될떄 딱 한번 호출 한다.
EX) public static final Elvis INSTANCE = new Elvis();
Elvis.INSTANCE
- 클래스가 초기화 될 떄 만들어진 인스턴스가 전체 시스템에서 하나뿐임이 보장된다.
싱글턴 생성 방식 2
- 정적 팩터리 메서드를 public static 멤버로 제공
EX) private static final Elvis INSTANCE = new Elvis(); // final로 선언된 필드는 다른 객체를 참조할 수 없다
public static Elvis getInstance() { return INSTANCE; }
- Elvis.getInstance는 항상 같은 객체의 참조를 반환하므로 제2의 Elvis인스턴스는 만들어지지 않음
생성 방식 2의 장점
- API를 바꾸지 않아도 싱글턴이 아니게 변경할 수 있다.
- 정적 팩터리를 제네릭 싱글턴 팩터리로 만들 수 있다 [ITEM 30]
싱글턴 생성 방식 3
- 원소가 하나인 열거타입을 선언
public enum Elvis {
INSTANCE;
public void methodName() {...}
}
- 대부분의 상황에서는 원소가 하나뿐인 열거 타입이 싱글턴을 만드는 가장 좋은 방법이다.
'IT 관련 책 정리 및 후기 > Java Effective E3' 카테고리의 다른 글
[ITEM 6] 불필요한 객체 생성을 피해라 (0) | 2022.05.19 |
---|---|
[ITEM 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2022.05.17 |
[ITEM 4] 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2022.05.17 |
[Item2] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.05.17 |
[Item1] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.05.17 |