싱글톤 패턴(Singleton Pattern)
GoF 디자인 패턴 중 생성 패턴에 해당한다.
어떤 클래스의 인스턴스는 하나임을 보장하는 패턴이다. 또한 그에 대한 전역적인 접근점을 제공한다.
주로 공통된 객체를 여러 곳에서 참조해야 하는 경우(ex. 데이터베이스 참조)에 사용한다.
자바에서는 생성자를 private으로 선언하고 getInstance()
와 같은 함수를 통해 인스턴스를 제공해주는 것이 일반적이다. 코틀린에서는 싱글톤 패턴을 보장해주는 object
키워드가 존재한다.
사용법
- 클래스의 인스턴스가 하나임을 보장해야 할 때
구조
- 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
소스 코드
REFERENCE
에릭 감마 외 3명, 「GoF의 디자인 패턴」, 피어슨에듀케이션코리아