- 지난 글에 이어 생성패턴을 다뤄본다.
추상 팩토리 (Abstract Factory)
빌더 (Builder)
팩토리 메서드 (Factory Methods)
프로토타입 (Prototype)
싱글턴 (Singleton)
싱글턴 (Singleton)
- 의도
단 한 개의 클래스 인스턴스를 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.
- 동기
JDBC connection 관리하는 connection pool 등은 객체가 여러 개 생성되면 설정 값이 변경될 위험이 있다.
클래스 자신이 자기의 유일한 인스턴스로 접근하는 방법을 자체적으로 관리하도록 한다.
- 활용성
- 클래스의 인스턴스가 단 하나임을 보장하고, 잘 정의된 접근점으로 모든 사용자가 접근할 수 있도록 해야 할 때
- 유일한 인스턴스가 서브클래싱으로 확장되어야 하며, 코드의 수정 없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때
- 구조
- 참여자
- Singleton: Instance() 연산을 정의하여, 유일한 인스턴스로 접근할 수 있도록 한다.
- 결과
- 유일하게 존재하는 인스턴스로의 접근을 통제
- name space 공간을 줄임 (전역변수 사용 X, 디버깅 시간 줄임)
- 상속된 서브클래스를 통해서 새로운 인스턴스 생성 가능
- 인스턴스 개수를 변경하기 자유로움 (1개 이상의 인스턴스를 생성해야 할때, 접근 허용 범위를 결정하는 연산만 더하면 됨)
- 클래스 연산을 사용하는 것보다 훨씬 유연함 (Singleton을 사용하지 않을 때 사용 가능한 클래스 연산)
- 구현
- 인스턴스가 유일해야 함을 보장함
- SIngleton의 클래스를 서브 클래싱
- 예제
Singleton
- 생성자를 private로 지정하여 외부에서 절대로 생성할 수 없도록 한다.
- synchronized를 통해 여러 쓰레드에서 동시에 접근하는 것을 막는다.
public class Singleton {
private static Singleton self = null;
private Singleton() {}
public synchronized static Singleton getInstance() {
if(self == null) {
self = new Singleton();
}
return self;
}
public void print() {
System.out.println("I am only one.");
}
}
public class Main {
public static void main(String[] args) {
Singleton s = Singleton.getInstance();
s.print();
}
}
- 참고 문헌
- GoF의 디자인 패턴(개정판) / 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블라시디스 공저 / 김정아 역 / 프로텍미디어 / 발행 2015년 03월 26일
'theory > 디자인패턴' 카테고리의 다른 글
GoF의 디자인 패턴. 생성패턴 4. 프로토타입 (0) | 2021.09.05 |
---|---|
GoF의 디자인 패턴. 생성패턴 3. 팩토리 메서드 (0) | 2021.08.22 |
GoF의 디자인 패턴. 생성패턴 2.빌더 (0) | 2021.08.15 |
GoF의 디자인 패턴. 생성패턴 1.추상 팩토리 (0) | 2021.08.08 |
GoF의 디자인 패턴. 서론 (0) | 2021.08.01 |