디자인 패턴 톺아보기 - Singleton Pattern
Updated:
1. 싱글톤 패턴(Singleton Pattern) 이란?
GOF 에서 말하는 싱글톤 패턴의 목적은 아래와 같습니다.
Ensure a class only has one instance, and provide a global point of access to it.
오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다.
1.1. 구조
Sample / Sequence Diagram
- Singleton
Instance()
연산을 정의하여, 유일한 인스턴스로 접근할 수 있도록 합니다.Instance()
연산은 클래스 연산이며, 유일한 인스턴스를 생성하는 책임을 맡습니다.
1.2. 사용 방법
- 사용자는 Singleton 클래스에 정의된
Instance()
연산을 통해서 유일하게 생성되는 단이렟 인스턴스에 접근할 수 있습니다.
1.3. 장/단점
- Advantages (+)
- Can control object creation.
- Disadvantages (–)
- Makes clients dependent on the concrete singleton class.
- Can cause problems in a multi-threaded environment.
1.4. 고려사항
- Consider the left design (problem):
- Multiple instances possible.
- Consider the right design (solution):
- Only one instance possible.
2. 싱글톤 패턴(Singleton Pattern) 사용예시
싱글톤 패턴은 다음 경우에 사용합니다.
- 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점으로 모든 사용자가 접근할 수 있도록 해야 할 때
- 유일한 인스턴스가 서브클래싱으로 확장되어야 하며, 사용자는 코드의 수정없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때
2.1. GOF 패턴
2.1.1. Singleton
class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
2.1.2. Main
public class Main{
public static void main(String[] args) {
Singleton ref1 = null;
Singleton ref2 = null;
ref1 = Singleton.getInstance();
ref2 = Singleton.getInstance();
if (ref1 == ref2) {
System.out.println("ref1 == ref2");
}
if (ref1.equals(ref2)) {
System.out.println("ref1.equals(ref2)");
}
}
}
결과는 아래와 같습니다.
ref1 == ref2
ref1.equals(ref2)
참고 자료
Leave a comment