싱글턴: 객체를 하나만 만들 수 있는 클래스
클래스를 싱글턴을 만들면 클라이언트를 테스트하기 어려울 수 있음.
JDK1.5 이전 싱글턴 구현 방법
기본: 생성자는 private 선언, 객체는 static 멤버 이용
1. 정적 멤버는 final로 선언
- private static final로 생성된 field는 초기화시 한 번만 호출됨
2. public으로 선언된 정적 팩터리 메서드 이용
- getInstatnce라는 메소드를 이용하여 항상 같은 객체에 대한참조를 반환하도록 함.(이것 이외의 객체 생성 불가)
팩터리 메서드 사용시 장점
1. api를 변경하지 않고도 싱글턴 패턴을 포기하는 것이 가능
- 스레드마다 별도의 객체를 반환하도록 팩터리 메서드 수정하는 것도 간단
2. 제네릭 타입 수용이 쉬움(규칙 27)
- 하지만 이장점이 필요없는 경우 public field 사용
싱글턴 유지시 필요사항
-모든 field를 transient로 선언하고 readResolve 메서드를 추가해야함.
(그렇지 않으면 deserialize 시마다 계혹 객체 생성
JDK1.5 이후 싱글턴 구현 방법
원소가 하나뿐인 enum 자료형 정의
- 기본적으로 public 필드 사용구현법과 동등, 하지만 좀더 간결 + 직렬화가 자동으로 처리 가능
'More Programmings > Effective Java' 카테고리의 다른 글
규칙 6. 유효기간이 지난 객체 참조는 폐기하라 (0) | 2017.10.09 |
---|---|
규칙5. 불필요한 객체는 만들지 말라 (0) | 2017.10.09 |
규칙 4. 객체 생성을 막을 때는 private 생성자를 사용하라 (0) | 2017.08.31 |
규칙2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려해라 (0) | 2017.08.28 |
규칙1. 생성자 대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라 (0) | 2017.08.28 |