Singleton 패턴 : 클래스의 인스턴스를 하나만 생성할 수 있도록 설정된 패턴
- 프로그램 내에서 단 하나의 인스턴스가 생성됨
- 생성된 인스턴스는 여러 인스턴스에서 접근하여 사용이 가능
※ 예제 코드
- Singleton 생성 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class SingletonSample { private static SingletonSample singleObject; // 싱글톤 인스턴스 private int setnum; // 인스턴스 상태 확인용 private SingletonSample(int setnum) { // 외부에서 생성 불가하도록 private 설정 this.setnum = setnum; } public static SingletonSample getSingletonSample(int i) { if(singleObject == null) { // 생성되지 않은 경우 객체 생성 singleObject = new SingletonSample(i); // 생성되어 있는 경우 기존의 객체를 반환 } return singleObject; } public void PrintSetnum() { // 인스턴스 상태 확인용 System.out.println("setnum : "+setnum); } } | cs |
- main 클래스
1 2 3 4 5 6 7 8 9 10 11 12 | public class SingletonMain { public static void main(String[] args) { SingletonSample s1 = SingletonSample.getSingletonSample(1); // 싱글톤 인스턴스 생성 SingletonSample s2 = SingletonSample.getSingletonSample(2); // 기존 생성된 싱글톤 인스턴스 호출 s1.PrintSetnum(); // 1 출력 s2.PrintSetnum(); // 1 출력 } } | cs |
| ※실제 출력은 모두 1로 출력된다 |
- main 클래스에서 생성이 2회 진행되는 듯 하나, 실제 생성은 SingletonSample s1 에서만 생성, SingletonSample s2 에서는 단순히 s1에서 생성된 싱글톤 인스턴스의 참조, s1, s2 모두 동일한 싱글톤 인스턴스를 가리킨다.
- 각 싱글톤 메서드로 int setnum 필드 값을 초기화 한다고 해도, 실제 초기화 되는건, s1의 getSingletonSample에 의한 초기화 뿐이다
댓글
댓글 쓰기