JAVA/Effective Java
규칙3 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하자
소농배
2018. 12. 19. 20:23
![]() |
|
싱글턴은 객체를 하나만 만들 수 있는 클래스다.
싱글턴 패턴 구현 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() {...}
}