728x90
반응형

✔️ 싱글톤이란?

싱글톤(Singleton) 패턴은 클래스의 인스턴스를 단 하나만 생성하도록 보장하는 디자인 패턴입니다.
객체가 계속해서 생성되는 것처럼 보여도, 실제로는 최초에 생성된 하나의 인스턴스만을 반환합니다.

💡 싱글톤 구현 예제 (Lazy Initialization 방식)

public class Singletone {

    private static Singletone singletone;

    // 생성자를 private으로 막아 외부에서 new로 생성 불가
    private Singletone() {}

    public static Singletone getInstance() {
        if (singletone == null) {
            singletone = new Singletone();
        }
        return singletone;
    }
}

📌 핵심 포인트:

  • private static 으로 클래스 내부에 단 하나의 인스턴스를 보관
  • 외부에서 new Singletone() 호출 불가능 (생성자 private)
  • getInstance() 메서드를 통해서만 인스턴스에 접근 가능
  • 필요할 때만 초기화하는 지연 초기화(Lazy Initialization) 방식 사용

⚠️ 싱글톤 패턴 사용 시 주의사항

  1. 객체를 2개 이상 생성하지 않도록 철저히 차단해야 함
    • 생성자를 private으로 감춰야 함
  2. 상태를 유지하지 않는 Stateless 설계가 중요
    • 필드를 통해 상태를 가지면 여러 사용자 간 충돌 위험
    • 예: 웹 애플리케이션에서 사용자별 데이터를 필드로 저장하면 큰일 남 😱
  3. Spring을 사용한다면 걱정할 필요 없음
    • 기본적으로 모든 Bean은 싱글톤 범위로 관리됨
    • @Component, @Service, @Repository 등 사용 시 자동 적용
  4. 공유되지 않는 데이터는 지역 변수 또는 ThreadLocal 사용
    • 예: 사용자 요청에 따른 데이터를 처리할 때는 필드 대신 메서드 파라미터 사용

🧠 결론

  • 싱글톤은 자원을 절약하고, 전역적으로 동일한 인스턴스를 공유할 수 있어 유용합니다.
  • 그러나 잘못 사용할 경우 상태 공유로 인한 오류 발생 가능성이 있으므로, Stateless 설계를 철저히 해야 합니다.
  • Spring에서는 기본이 싱글톤이지만, 상태 관리만 잘 하면 안전하게 사용 가능!
728x90
반응형

+ Recent posts