특정 클래스의 인스턴스가 프로그램 내에서 오직 하나만 생성되도록 보장하는 디자인 패턴
한정된 자원 관리나 설정 공유가 필요한 상황에서 유용하다.
장점과 단점
장점
전역적 접근성 / 메모리 절약 / 동기화된 접근
단점
테스트가 어렵다 / 멀티스레드 문제 / 의존성 관리의 어려움
코드 예시
package ch04;
public class Doorman {
//static 으로 인해 메인 실행전에 Doorman을 띄워 놓을 수 있다.
//private Doorman() {}
//SRP -> single responsibilty principle 단일 책임
static Doorman instance = new Doorman();
private Doorman() {
}
public void 쫒아내(Animal animal){
System.out.println(animal.getName() + " 쫒아내");
}
}
------------------------------------------------
public class App {
public static void main(String[] args) {
Doorman doorman = Doorman.instance;
Doorman doorman2 = Doorman.instance;
System.out.println(doorman.hashCode());
// response: 793589513
System.out.println(doorman2.hashCode());
// response: 793589513
Cat cat = new Cat();
Mouse mouse = new Mouse();
doorman.쫒아내(cat);
doorman.쫒아내(mouse);
}
}
main이 실행 될 때 doorman이 하나만 생길 수 있게 만들었다.
Doorman 클래스에서 static Doorman instance = new Doorman(); 이 코드에서
static을 통해 Doorman을 나타나게 했고
private Doorman() {} 을 통해 main에서 Doorman이 new로 생성되지 못하게 막아놓아서
중복된 Doorman을 생성할 수 없게 만들었다.

※ 싱글톤 패턴 , SRP 이해를 위한 그림
참고 문헌
Share article