Design Patterns

[Design Patterns] Singleton

우라릭 2024. 2. 25. 01:07

 

 

목차

     

     

     

    개요

    이번 글에선 Object Creational Pattern인 싱글톤 패턴에 대해 알아보겠습니다.

    내용

    요약

    클래스가 하나의 객체만 가질 수 있게 하고 이 객체에 대한 글로벌한 접근을 제공하자.

    예시

    데이터베이스 커넥션을 생성하고 유지하는 것은 값비싼 작업입니다. 매 요청마다 혹은 객체마다 DB 커넥션을 맺으면 어떻게 될까요? 아마 꽤 많은 서버 자원을 DB 커넥션을 맺는데에만 써야 할 것입니다. 이럴 때, 한 객체에서 DB 커넥션을 맺어놓고 항상 이 객체를 통해서만 DB 요청을 하게 되면 문제가 어느정도 완화되지 않을까요?

    구조

     

    이야깃거리

    언제 써야 할까?

    • 오직 하나의 객체만 가져야 하는 클래스가 있고, 이 객체를 쉽게 가져올 수 있어야 할 때

    장단점

    • (Pros) 유일한 객체에 대한 조절되는 접근을 제공합니다. 보통 singletone 패턴을 구현할 때면 생성자를 private으로 합니다.
    • (Cons) 시스템의 확장성과 테스트 용이성이 줄어들 수 있습니다.

    Case Study

    1. Java Runtime

    모든 자바 애플리케이션은 애플리케이션이 구동 중인 환경을 알 수 있는 Runtime이라는 클래스의 단일 인스턴스를 가지고 있습니다. 자바는 이 Runtime 클래스를 싱글톤 패턴을 이용해 제공합니다.

    package java.lang;
    
    public class Runtime {
        private static final Runtime currentRuntime = new Runtime();
    
        private static Version version;
    
        public static Runtime getRuntime() {
            return currentRuntime;
        }
    
        /** Don't let anyone else instantiate this class */
        private Runtime() {}
    
    // ...

     

    실제 Runtime 클래스의 코드를 보면 이 클래스를 따로 객체화하지 말 것을 주석으로 안내해주고 있습니다.

     

    출처

    GoF Design Patterns

    'Design Patterns' 카테고리의 다른 글

    [Design Patterns] Bridge  (0) 2024.03.16
    [Design Patterns] Adapter  (0) 2024.03.16
    [Design Patterns] Prototype  (0) 2024.02.25
    [Design Patterns] Factory Method  (1) 2024.01.27
    [Design Patterns] Builder  (0) 2024.01.20