CS지식/객체지향 (토비의스프링 VOL.1)

싱글톤 패턴

뮤츠 2024. 5. 6. 20:50
  • 어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 갯수, 이름처럼 주로 하나만 존재하도록 강제하는 패턴.
  • 어떠항 메서드가 호출될 때마다 인스턴스를 생성한다면, 과부하가 생기므로, 이를 방지하기 위함.
  • 싱글톤 패턴의 한계
  1. private 생성자를 갖고 있기 때문에 상속할 수 없다.
  2. 싱글톤은 테스트하기가 힘들다.
  3. 서버 환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
  4. 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.
  • 싱글톤 레지스트리 (with ChatGPT)

"싱글톤 레지스트리"는 디자인 패턴 중 하나로, 싱글톤 패턴의 한 변형입니다. 싱글톤 패턴은 클래스의 인스턴스가 하나만 생성되도록 제한하는 패턴인데요, 싱글톤 레지스트리는 여러 싱글톤 인스턴스들을 관리하고, 이들에 대한 액세스를 제공하는 중앙 관리 시스템입니다.

싱글톤 레지스트리의 작동 원리

싱글톤 레지스트리는 일반적으로 키-값 쌍을 사용하여 각 싱글톤 객체에 접근할 수 있도록 해줍니다. 이는 다음과 같은 특징을 가집니다:

  1. 중앙 관리: 모든 싱글톤 인스턴스는 중앙 레지스트리에 등록되며, 이 레지스트리를 통해 인스턴스에 접근할 수 있습니다.
  2. 동적 관리: 필요에 따라 싱글톤 인스턴스를 동적으로 생성하거나 제거할 수 있습니다.
  3. 일관된 접근: 클라이언트는 레지스트리를 통해 일관된 방법으로 싱글톤 객체에 접근할 수 있습니다.

사용 예

예를 들어, 서로 다른 유형의 데이터베이스 연결이 필요한 애플리케이션에서는 각 데이터베이스 연결을 싱글톤으로 관리하고, 이들을 레지스트리를 통해 관리할 수 있습니다. 이를 통해 각 연결은 필요할 때 한 번만 생성되며, 전체 시스템에서 공유됩니다.

장점

  • 효율성: 메모리 사용을 최적화하고, 객체 생성 비용을 절약할 수 있습니다.
  • 일관성: 공유 리소스에 대한 접근을 중앙에서 관리하여 일관성을 유지할 수 있습니다.

단점

  • 복잡성 증가: 싱글톤 레지스트리를 구현하고 관리하는 것은 복잡할 수 있습니다.
  • 의존성 문제: 다양한 컴포넌트 간의 강한 결합을 초래할 수 있습니다.

싱글톤 레지스트리 패턴은 특정 상황에서 유용하지만, 사용할 때는 시스템의 전체적인 설계와 요구 사항을 고려해야 합니다.

  • 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하는 싱글톤 레지스트리라고 할 수 있다.
  • 1.6.2 싱글톤과 오브젝트의 상태

읽기 전용 오브젝트라면, 싱글톤으로 사용해도 문제가 없다.

그 외에, 변수 등 stateful 방식은 싱글톤으로 만들어 관리하면, 멀티스레드 환경에서 심각한 문제가 될 수 있다.