이번에 정리하고자하는 내용은 챕터 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) 방법이 가장 좋은 방법이다.
'java' 카테고리의 다른 글
[Effective Java] private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2014.01.23 |
---|---|
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자 (3) | 2013.12.23 |
[Effective Java] 생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자 (4) | 2013.12.19 |