Singleton Pattern

정안녕·2026년 1월 21일

Metaverse

목록 보기
14/16

싱글톤 패턴...

단일색의 톤으로 이루어진 문양인가 싶을 수 있지만
이는 디자인 패턴에서 사용된다.

싱글톤 패턴(Singleton Pattern) 이해하기

1. 싱글톤 패턴이란?

애플리케이션이 시작될 때 어떤 클래스가 단 한 번만 메모리를 할당받고, 그 메모리에 단 하나의 인스턴스를 만들어 사용하는 디자인 패턴.

💡 왜 사용하나요?

  • 자원 절약: 매번 객체를 생성할 필요가 없어 메모리 낭비를 방지한다.
  • 데이터 공유: 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
  • 공통 객체 관리: DBCP(데이터베이스 커넥션 풀), 로그 기록기(Logger), 설정 관리자 등에 주로 사용된다.

2. 싱글톤 구현의 3대 원칙

싱글톤을 구현하기 위해서는 외부에서 마음대로 객체를 생성하지 못하도록 생성 권한을 클래스 내부로 가져와야 한다.

  1. private 생성자: 외부에서 new 키워드를 사용할 수 없도록 막는다.
  2. static 변수: 클래스 로딩 시점에 생성된 단 하나의 인스턴스를 보관합니다.
  3. static 메서드: 외부에서 인스턴스를 받아갈 수 있는 유일한 통로(getInstance)를 제공합니다.

3. 가장 권장되는 구현 방식: Lazy Holder

과거에는 여러 스레드가 동시에 접근할 때 객체가 2개 생성되는 문제가 있었으나, 현대 Java에서는 Lazy Holder 방식을 가장 권장한다.

public class Singleton {

    // 1. private 생성자로 외부 생성을 원천 차단
    private Singleton() {}

    // 2. 내부 정적 클래스(Holder) 정의
    // Singleton 클래스가 로드될 때가 아니라, getInstance()가 처음 호출될 때 로드됩니다.
    private static class Holder {
        private static final Singleton INSTANCE = new Singleton();
    }

    // 3. 유일한 인스턴스를 반환하는 메서드
    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}


# ✅ 싱글톤 패턴의 장점 (Pros)
 
🚀 메모리 효율성: 객체를 매번 생성하지 않고 기존 인스턴스를 재사용하므로 메모리 낭비를 줄인다.

⚡ 속도 향상: 인스턴스가 이미 메모리에 올라와 있어 객체 생성 로딩 시간이 단축된다.

🌐 데이터 공유: 전역 인스턴스이므로 여러 클래스에서 하나의 상태를 공유하고 관리하기 쉽다.

🎯 유일성 보장: 설정 파일 관리자나 데이터베이스 커넥션 풀처럼 시스템 전체에서 하나만 존재해야 하는 자원을 안전하게 관리한다.

-----------------------------------------------------------------------------------------------

⚠️ 싱글톤 패턴의 단점 (Cons)
🔗 높은 결합도: 전역에서 접근 가능하므로 의존 관계가 복잡해지며, 유지보수가 어려워질 수 있다.

🧪 테스트의 어려움: 단위 테스트 시 독립적인 수행이 어렵고, 매 테스트마다 객체 상태를 초기화해야 하는 번거로움이 있다.

🛠️ 유연성 저하: 상속을 통한 확장이 어렵고, 내부 상태가 변경될 경우 예상치 못한 부작용이 발생할 수 있다.

🧵 멀티스레드 위험: 여러 스레드에서 동시에 접근할 경우, 인스턴스가 중복 생성될 수 있는 동기화 문제가 존재한다.
profile
죽순 디벨롭

0개의 댓글