[디자인 패턴] Singleton

 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에 의한 초기화 뿐이다


댓글