Jaebi의 Binary는 호남선

Creational Patterns - Singleton 본문

공부

Creational Patterns - Singleton

jaebijae 2024. 6. 1. 19:40

목차

    Singleton

    • 클래스는 오직 하나의 instance를 가지고 있고 전역적인 접근을 제공함
    • 클래스 자체가 자기의 유일한 instance의 접근 방식을 관리 + 다른 인스턴스가 생성되지 않도록 함
    • 동기: 시스템에 프린터가 많이 있어도 프린터 스풀은 하나, 한 회사에서는 하나의 회계 시스템 운영
    • 활용성:
      • 클래스의 인스턴스가 오직 하나여야 함을 보장
      • 모든 사용자가 접근 할 수 있음
      • 유일한 인스턴스가 서브클래싱으로 확장되어야 함
      • 코드 수정 필요 없이 서브클래스의 인스턴스 사용 가능
    • 사용:
      • 클래스 인스턴스를 생성하는데 비용이 큼 - 인스턴스 생성에 외부 소스에서 데이터를 많이 가져와야하는 경우
      • 코드 전체에서 동일한 객체에 게속 접근을 해야할 경우 (e.g. logger)
      • 일종의 캐싱 계층이 필요할 경우 - 인스턴스 요청에서 캐시를 확인하고 관리 할 수 있음

    • 구조:
      • Singleton: static Instance()를 정의하여 유일한 인스턴스로 접근할수 있도록 함, 유일한 인스턴스를 생성하는 책임을 맡음
      • 클래스 생성자는 private 임으로 클래스 외부에서 인스턴스 생성을 막음
    • 장점:
      • Singleton 클래스 자체가 인스턴스를 캡슐화하여 사용자가 언제, 어떻게 인스턴스에 접근할 수 있는지 제어
      • Name space를 좁힘
      • Singleton 클래스는 상속될 수 있어, 상속된 서브클래스를 통해 새로운 인스턴스 생성가능 → 런타임에 필요한 인스턴스를 써서 응용프로그램을 구성 가능
    • Sample Code:
    class Singleton {
      // Private static instance
      static final Singleton _instance = Singleton._privateConstructor();
      static String _name = 'Jaehwi';
      // Private constructor
      Singleton._privateConstructor();
      // Public static method to access the instance
      static Singleton get instance => _instance;
      void printName() {
        print(_name);
      }
      void setName(String newName) {
        _name = newName;
      }
    }
    void main() {
      var instance1 = Singleton.instance;
      var instance2 = Singleton.instance;
      instance1.printName();
      instance2.printName();
      instance1.setName('Hwijae');
      instance1.printName();
      instance2.printName();
    }

    '공부' 카테고리의 다른 글

    Structural Patterns - Adapter  (0) 2024.06.01
    Creational Patterns - Factory Method  (0) 2024.06.01
    Creational Patterns - Builder  (0) 2024.06.01
    Design Pattern  (0) 2024.06.01
    Mobile Clean Architecture  (0) 2024.06.01