디자인 패턴
생성 패턴 - 1. 싱글톤(Singleton)
츄빙
2024. 4. 29. 20:02
📌 싱글톤 패턴이란?
-객체의 인스턴스가 1개만 생성되는 패턴
//Singleton.java
package creational.singleton;
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
//Client.java
package creational.singleton;
public class Client {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2);
}
}
- 싱글톤 생성자는 외부에서 호출하지 못하도록 private 접근 제어자가 필요하다.
- 싱글톤 인스턴스를 static으로 선언하여 다른 클래스의 인스턴스들이 접근하여 사용 가능
- 외부에서는 getInstance()를 통해서만 싱글톤 인스턴스에 접근할 수 있다.
언제 사용해야하는가?
- 프로그램 내에서 여러 클래스가 공유하는 단 하나의 인스턴스가 필요할 때
- ex) 데이터베이스 연결을 담당하는 클래스에서 싱글톤을 사용하여 모든 곳에서 동일한 연결 공유
싱글톤 패턴의 문제점
- 동시성 문제 - 싱글톤 인스턴스는 자원을 공유하고 있기 때문에 멀티스레딩 환경에서 동시성 문제가 발생할 수 있다. 이를 위해 syncronized
- 높은 의존성 - 클래스의 객체를 미리 생성한 뒤에 필요한 경우 정적 메서드를 사용하므로 클래스 사이에 의존성이 높아진다.
- 단위 테스트에서의 어려움 - 인스턴스 자원을 공유하고 있어, 테스트 시 매번 인스턴스의 상태를 초기화시켜야한다.
//수정된 Singleton.java
package creational.singleton;
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
// synchronzied로 동시성 문제 해결
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}