본문 바로가기

java

[Effective Java] private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자

이번에 정리하고자하는 내용은 챕터 2의 3항목인 "private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자"이다. 블로그 작성 목적은 복습과 이 책을 다 읽고자하는 다짐으로 시작한다.

 

1. 싱글톤

  디자인 패턴 중 가장 간단하면서도 자주 사용하는 패턴 중 하나이며 하나의 인스턴스만 생성되는 클래스이다.


2. 싱글톤 사용방법

  나는 이책에서 예로 설명하는 싱글톤 패턴 중 static 팩토리 메소드 패턴을 자주 사용하고 있으며 이책에서는 세가지의 

  싱글톤 패턴 방법을 소개하고 있다.

  가. public final 필드를 갖는 싱글톤  

public class Y2kpooh {
    public static final Y2kpooh INSTANCE = new Y2kpooh();
    private Y2kpooh() { }
}

private 생성자는 딱 한번만 호출되어 public static final 필드인 Y2kpooh.INSTANCE를 초기화 한다.

이 방법의 이점은 멤버 필드만 봐도 싱글톤 클래스로 알수 있는 장점은 있다.


  나. static 팩토리 메소드를 갖는 싱글톤

public class Y2kpooh {
    private static final Y2kpooh INSTANCE = new Y2kpooh();
    private Y2kpooh() { }
    public static Y2kpooh getInstance() { return INSTANCE; }
}

이 방법의 이점은 클래스에서 반환하는 싱글톤 인스턴스의 형태를 변경할 수 있는 유연성을 제공한다.


위 두 가지 방법으로 구현한 싱글톤 클래스를 직렬화 하기 위해서는 Serializable을 implements해야 하며 싱글톤을 보장받기 위해서는 인스턴스 필드를 transient로 선언해야 하며 readResolve 메소드를 추가해야 한다.


  다. 열거형(Enum)싱글톤

public enum Y2kpooh {
    INSTANCE;
    public void leaveTheBuilding() {}
}

이 방법은 가 항목과 기능적으로는 동일하지만 더 간단하며 앞서 나온 가,나 항목과 다르게 직렬화가 자동으로 지원되고 인스턴스가 여러 개 생기지 않도록 보장하는 장점이 있다.


결론

싱글톤 구현 시 열거형(Enum) 방법이 가장 좋은 방법이다.