[Java] 싱글톤 패턴 (Singleton Pattern)

Yumi Kim·2025년 2월 1일

Java 알고리즘

목록 보기
7/17
post-thumbnail

싱글톤 패턴

JVM내에서 인스턴스가 오직 1개만 생성되어야 하는 디자인 패턴.

pulbic class Singleton {
	// 객체를 static 변수로 설정하여 인스턴스화 X, private으로 직접 접근 제한 
    private static Singleton instance = new Singleton();
    
    // 기본 생성자를 private으로 설정하여 직접 접근 제한 
    private Singleton() {}
    
    // getInstance() 함수를 통해서만 인스턴스를 얻을 수 있음 
    public static Singleton getInstance() {
    	return instance
    }
}

(+) 장점 :

  • 객체 재사용 가능 -> 메모리 효율성 증가
  • 전역성 (=어플리케이션 내 어디서든 접근 허용) -> 객체의 일관된 상태 유지

(-) 단점 :

  • 객체간의 결합도 증가 (-> S.O.L.I.D 원칙에 위배)
  • 변경에 대한 복잡성
  • TDD (Test Driven Development)에 방해된다.

활용:

  • DBCP (DataBase Connection Pool) : 데이터베이스와의 연결을 효율적으로 관리하기 위해 연결 객체를 미리 생성해두고 재사용하는 방식.
    -> 애플리케이션 전체에서 하나의 연결 풀만 존재하도록 보장하고, 이를 여러 곳에서 재사용하기 위해 싱글톤 패턴 사용.

Multi-thread 환경에서의 구현

멀티스레드 환경에서 객체 중복 생성 및 동기화 문제가 발생하므로 주의하여 구현해야한다.
이를 해결하는 방법으로 Synchronized 키워드, DCL(Double Checked Locking) Singleton Pattern, ENUM 등 다양하게 존재하지만, 이 중에서 가장 많이 쓰이는 방법 하나를 소개한다.

  • LazyHolder Singleton 패턴 : 내부 클래스를 만들어 Singleton 클래스가 최초 로딩될 때가 아닌, getInstance 메서드가 호출될 때 로딩되어 인스턴스를 생성한다.

    public class Singleton {
        private Singleton(){}
    
        public static Singleton getInstance() {
            return LazyHolder.INSTANCE;
        }
    
        private static class LazyHolder {
            private static final Singleton INSTANCE = new Singleton();
        }
    }
profile
✿.。.:* ☆:**:. 🎀 Daily Study 🎀 .:**:.☆*.:。.✿

0개의 댓글