[Design Pattern] GoF 생성 패턴 - 싱글톤 패턴(Singleton Pattern)



싱글톤 패턴(Singleton Pattern)

GoF 디자인 패턴 중 생성 패턴에 해당한다.
어떤 클래스의 인스턴스는 하나임을 보장하는 패턴이다. 또한 그에 대한 전역적인 접근점을 제공한다.
주로 공통된 객체를 여러 곳에서 참조해야 하는 경우(ex. 데이터베이스 참조)에 사용한다.
자바에서는 생성자를 private으로 선언하고 getInstance()와 같은 함수를 통해 인스턴스를 제공해주는 것이 일반적이다. 코틀린에서는 싱글톤 패턴을 보장해주는 object 키워드가 존재한다.


사용법

  • 클래스의 인스턴스가 하나임을 보장해야 할 때


구조

img

  • Singleton 클래스는 getInstance() 메소드를 통해 유일한 인스턴스를 제공한다.


장점

  • 유일하게 존재하는 인스턴스로의 접근을 통제 : 인스턴스를 캡슐화하므로, 사용자의 접근을 제어할 수 있음
  • 전역변수보다 좋음
  • 인스턴스 개수를 변경하기 쉬움 : 만약 인스턴스가 여러 개 존재하도록 하고 싶다면, 여러 개의 인스턴스를 생성해서 각각의 인스턴스로 접근할 수 있도록 구현하면 된다


예제

구현

Singleton 클래스의 객체는 getInstance()를 통해 생성, 접근한다. 생성자의 접근제한자를 private으로 설정하고, 생성자가 호출될 때마다 count를 추가해 인스턴스의 생성 횟수를 확인한다.

public class Singleton {
    private static Singleton instance;
    private String name;
    private int count = 0;

    private Singleton() {
        count++;
        name = "This is the only reference : " + count;
    }

    public static Singleton getInstance() {
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
    public String getName() {
        return name;
    }
}

public class Main {
    public static void main(String[] args) {
        Singleton singleton_reference1 = Singleton.getInstance();
        System.out.println("First Instance Name : "+singleton_reference1.getName());

        Singleton singleton_reference2 = Singleton.getInstance();
        System.out.println("Second Instance Name : "+singleton_reference2.getName());
    }
}
[실행 결과]
First Instance Name : This is the only reference : 1
Second Instance Name : This is the only reference : 1


소스 코드

전체 소스 코드



:bookmark: REFERENCE
에릭 감마 외 3명, 「GoF의 디자인 패턴」, 피어슨에듀케이션코리아