싱글톤 패턴: 두 판 사이의 차이

기술노트
(Gemini 벌크 업로더로 자동 업로드)
 
(차이 없음)

2025년 9월 6일 (토) 05:05 기준 최신판

👑 싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴은 객체 지향 디자인 패턴 중 하나로, 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 그 인스턴스에 대한 전역적인 접근점을 제공하는 패턴입니다. 시스템 전체에서 유일하게 하나만 존재해야 하는 객체를 만들 때 사용됩니다.

예를 들어, 시스템의 환경 설정, 데이터베이스 커넥션 풀, 로깅 객체 등은 여러 개가 존재할 필요 없이 단 하나의 인스턴스만으로 충분합니다.


⚙️ 싱글톤 패턴의 구현 방법 (Java 예시)

가장 기본적인 구현 방식은 다음과 같습니다.

1. 생성자(Constructor)의 접근 제어자를 `private`으로 만들어, 외부에서 `new` 키워드로 객체를 생성할 수 없도록 막습니다. 2. 클래스 내부에 자기 자신의 유일한 인스턴스를 `private static` 멤버 변수로 생성합니다. 3. 이 유일한 인스턴스에 접근할 수 있는 `public static` 메서드(보통 `getInstance()`)를 제공합니다.

```java public class Singleton {

   // 2. 자기 자신의 유일한 인스턴스를 생성
   private static Singleton instance = new Singleton();
   // 1. 생성자를 private으로 선언
   private Singleton() {}
   // 3. 외부에서 인스턴스에 접근할 수 있는 public 메서드 제공
   public static Singleton getInstance() {
       return instance;
   }

} ```


⚖️ 싱글톤 패턴의 장단점

  • 장점 :

> * 메모리 효율성: 인스턴스를 하나만 생성하므로, 메모리 낭비를 방지할 수 있습니다. > * 전역적인 접근: 어디서든 동일한 인스턴스에 쉽게 접근하여 데이터를 공유하고 상태를 유지할 수 있습니다.

  • 단점 :

> * 객체 지향 원칙 위배: 싱글톤 인스턴스는 사실상 전역 변수처럼 사용되어, 다른 객체와의 결합도(Coupling)가 높아지고 단일 책임 원칙(SRP)을 위배하기 쉽습니다. > * 테스트의 어려움: 상태를 공유하는 전역 인스턴스이므로, 단위 테스트(Unit Test)를 수행하기가 매우 어렵습니다. 각 테스트가 서로에게 영향을 줄 수 있습니다. > * 멀티스레드 환경 문제: 여러 스레드가 동시에 `getInstance()`를 호출할 때, 동기화 처리를 하지 않으면 여러 개의 인스턴스가 생성될 수 있습니다.


💡 개발자 핵심 Point

  • 싱글톤 패턴은 구현하기는 쉽지만, 안티 패턴(Anti-pattern)으로 불릴 만큼 많은 비판을 받기도 합니다. 특히 테스트의 어려움과 높은 결합도 문제가 큽니다.
  • 따라서 싱글톤 패턴을 사용하기 전에는, "이 객체가 정말로 시스템 전체에서 단 하나만 존재해야 하는가?"를 신중하게 고민해야 합니다.
  • 최근에는 의존성 주입(Dependency Injection, DI) 프레임워크(예: Spring)를 사용하여, 객체의 생명주기를 프레임워크가 관리하도록 함으로써 싱글톤 패턴의 단점을 해결하고 장점을 취하는 방식이 널리 사용됩니다. (Spring의 빈(Bean)은 기본적으로 싱글톤으로 관리됩니다.)