반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package practice; public class SingleTone { public static SingleTone INSTANCE; public static synchronized SingleTone getInstance() { if ( INSTANCE == null ) { INSTANCE = new SingleTone(); } return INSTANCE; } private SingleTone() {} } | cs |
기존에 싱글톤 패턴을 사용할 때 다음과 같이 생성해 주었다.
하지만 이런 형태로 만들 시 private 생성자를 생성하였다 해도 java reflection 성질을 이용하여 객체를 생성 할 수있다.
그리고 INSTANCE 객체가 null일때 인스턴스 객체 생성을 위해서 synchronized를 해주어야 하고 신경써야 할 부분이 많아 번거롭다.
이런 단점을 해소하고 오직 하나의 객체만을 안전하게 공유하여 사용할 수 있도록
하기 위해서는 JDK 1.5에서 부터는 원소가 하나 뿐인 enum 자료형을 생성하여 사용하기를 권장한다.
이렇게 지정하여 싱글톤 패턴을 정의하였을 때 다음과 같은 장점을 얻을 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package practice; public enum SingleToneEnum { INSTANCE; private int age; public int getAge() { age = age + 1; return age; } } package practice; public class practice { public static void main(String args[]) { System.out.println(SingleToneEnum.INSTANCE.getAge()); } } | cs |
- INSTANCE 가 생성될 때, multi thread 로 부터 안전하다.
- 단 한번의 인스턴스 생성을 보장한다.
- reflection으로 부터 접근을 막을 수 있다.
출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙3 인용.
반응형
'JAVA > Effective Java' 카테고리의 다른 글
객체의 생성과 삭제 - 규칙 7 종료자 사용을 피하라 (0) | 2018.05.29 |
---|---|
객체의 생성과 삭제 - 규칙 6 유효기간이 지난 객체 참조는 페기하라. (0) | 2018.05.29 |
객체의 생성과 삭제 - 규칙 5 불필요한 객체는 만들지 말라 (0) | 2018.05.29 |
객체의 생성과 삭제 - 규칙 4 객체 생성을 막을 때는 private 생성자를 사용하라. (0) | 2018.05.29 |
객체의 생성과 삭제 - 규칙 2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라 (0) | 2018.05.29 |