JAVA/Effective Java

규칙3 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하자

소농배 2018. 12. 19. 20:23
이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기


싱글턴은 객체를 하나만 만들 수 있는 클래스다.

싱글턴 패턴 구현 1

//생성자를 private 으로 선언하고 public static 필드로 인스턴스를 저장. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public void leaveTheBuilding() {...} }

싱글턴 패턴 구현 2

//정적 팩터리를 이용한 싱글턴 패턴 public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public static Elvis getInstance() { return INSTANCE; } public void leaveTheBuilding() {...} }

위에서 생성한 싱글턴 패턴의 클래스를 직렬화 하기 위해서는 각 필드마다 transient로 선언하고 
readResolve() 메서드를 추가해 줘야 역직렬화 될 때마다 새로운 객체가 생기지 않는다.

private Object readResolve() { //동일한 Elvis 객체가 반환되도록 하는 동시에, 가짜 Elvis 객체는 garbage collector 가 처리하도록 만든다. return INSTANCE; }

원소가 하나 뿐인 Enum 자료형으로 정의하면 싱글턴 패턴을 따른다.

public enum Elvis { INSTANCE; public void leaveTheBuilding() {...} }