ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 싱글톤 패턴(Singleton Pattern)
    CS이론/디자인패턴 2023. 8. 10. 16:59

    싱글톤 패턴이란?

    싱글톤 패턴(Singleton Pattern)은 GoF의 생성 패턴 중 하나로 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴입니다. 어떤 클래스가 여러 곳에서 사용될 수도 있지만 오직 하나의 인스턴스만 존재하도록 하는 것이 목적입니다. 보통 데이터베이스 연결 모듈에 많이 사용합니다.

    장점

    싱글톤 패턴을 통해 인스턴스를 전역적으로 접근할 수 있으며, 리소스를 공유하거나 중복 생성을 방지하여 메모리 절약을 할 수 있습니다.

    단점

    멀티스레드 환경에서 동기화에 주의하여야 하며, 너무 과도하게 사용하는 것은 다른 클래스의 인스턴스들 간에 결합도를 높일 수 있어 객체 지향적인 설계를 저해할 수 있습니다. 또한 TDD(Test Driven Development)를 할 때 걸림돌이 됩니다. 단위 테스트는 테스트가 서로 독립적이어야 하지만 싱글톤 패턴은 미리 생성된 인스턴스를 기반으로 구현하므로 각 테스트마다 독립적인 인스턴스를 만들기가 어렵습니다.

    구현

    싱글톤 패턴은 많이 사용하는 만큼 다양한 구현 방식이 있지만, 이 글에서는 기본적인 간단한 구현 방식만 살펴보도록 하겠습니다.

    • 기본적인 Thread-Safe 싱글톤 패턴
    class Singleton {
        private static Singleton instance;
    
        private Singleton() {}
    
        public static synchronized Singleton getInstance() {
            if(instance  == null) {
                instance  = new Singleton();
            }
            return instance;
        }
    }

    이 코드에서 synchronized 키워드가 없을 경우가 가장 기본적인 형태이고, synchronized 키워드를 사용하면서 Tread-Safe하게 구현하였습니다. 그렇지만 synchronized는 속도가 저하된다는 큰 단점이 있습니다. 이를 해결하기 위해 중첩 클래스를 활용한 LazyHolder를 사용하여 구현하는 방법이 있습니다.

     

    • 중첩 클래스를 활용한 싱글톤 패턴
    class Singlton {
        private static class LazyInstanceHolder {
            private static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return LazyInstanceHolder.INSTANCE;
        }
    }

    Java에서 가장 많이 사용하는 형태인 중첩 클래스를 이용한 LazyHolder 방식의 싱글톤 패턴입니다. JVM의 클래스의 초기화 과정에서 원자성을 보장하는 원리를 이용하는 방식입니다. final 로 선언한 INSTANCE는 getInstace() 호출 시 LazyInstanceHolder 클래스의 초기화가 이루어 지면서 원자성이 보장된 상태로 단 한번 생성되고, final 변수 이므로 이후로 다시 instance 가 할당되는 것 또한 막을 수 있습니다. 이처럼 synchronized를 사용하지 않고 JVM의 원자성 보장을 이용하여 Thread-safe하게 싱글톤 패턴을 구현할 수 있습니다.

     

    참고

    싱글톤 패턴이 필요한 이유와 실제 서비스에 적용까지

     

    Injae's devlog

    현실의 문제를 해결하는 엔지니어

    injae-kim.github.io

    면접을 위한 CS 전공지식 노트 - 예스24

     

    면접을 위한 CS 전공지식 노트 - 예스24

    디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지!CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다!개발자 면접에서 큰 비중을 차지하는 CS(Comp

    www.yes24.com

     

    'CS이론 > 디자인패턴' 카테고리의 다른 글

    팩토리 패턴(Factory Pattern)  (0) 2023.08.11

    댓글

Designed by Tistory.