어떤 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다. 이 패턴은 인스턴스를 전역적으로 접근 가능하게 하고, 여러 곳에서 동시에 인스턴스를 생성하지 않도록 하는 데 사용됩니다.
싱글톤 패턴을 구현하는 가장 일반적인 방법은 다음과 같습니다.
생성자를 private로 선언하여 외부에서 직접 인스턴스를 생성하는 것을 막습니다.
클래스 내부에서 유일한 인스턴스를 생성합니다.
외부에서 해당 인스턴스에 접근할 수 있는 public static 메서드를 제공합니다.
public class Singleton {
private static Singleton instance;
// private 생성자
private Singleton() {
// 초기화 코드
}
// 인스턴스 반환 메서드
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// 기타 메서드
public void doSomething() {
// 동작 코드
}
}
위의 예시에서는 instance 변수가 클래스의 유일한 인스턴스를 저장하며, getInstance() 메서드를 통해 외부에서 인스턴스에 접근할 수 있습니다. 이 메서드는 인스턴스가 존재하지 않을 경우에만 인스턴스를 생성하고, 이미 인스턴스가 존재하는 경우에는 기존 인스턴스를 반환합니다.
싱글톤 패턴은 다음과 같은 장점과 단점을 가지고 있습니다.
인스턴스가 오직 하나만 생성되므로, 메모리 낭비를 줄일 수 있습니다.
여러 곳에서 동시에 인스턴스를 생성하는 경우를 방지하여 일관된 상태를 유지할 수 있습니다.
전역적으로 접근 가능하므로, 다른 객체들이 쉽게 인스턴스에 접근할 수 있습니다.
인스턴스가 전역적으로 공유되므로, 상태를 공유하는 다중 스레드 환경에서 동기화 처리가 필요할 수 있습니다.
테스트하기 어려울 수 있으며, 의존성을 갖는 객체를 모의(mock) 처리하기 어려울 수 있습니다.
코드 유지보수가 어려울 수 있으며, 인스턴스의 생성 시점과 수명을 다루기 어려울 수 있습니다.
따라서, 상황에 맞게 적절히 주의하며 활용해야 합니다.
그냥 DI 하자..