2024. 3. 9. 01:06ㆍCS - Roadmap.sh/10. Design Patterns
※[https://roadmap.sh/computer-science]를 따라서 공부하고 기록한 글입니다.
cs - 10. Design Patterns - 10.1 GoF Design Pattern - 10.1.1 Singleton(싱글톤 패턴)
Design Patterns
Design patterns are solutions to common problems in software design. They are formalized best practices that the programmer can use to solve common problems when designing an application or system.
디자인 패턴은 소프트웨어 설계의 일반적인 문제에 대한 해결책입니다. 프로그래머가 애플리케이션이나 시스템을 설계할 때 일반적인 문제를 해결하는 데 사용할 수 있는 공식화된 모범 사례입니다.
디자인 패턴은 크게 3가지 유형으로 분류할 수 있습니다.
1. 생성 패턴(Creational Patterns) - 추상 객체 인스턴스화
객체 생성에 관련된 패턴으로, 객체의 생성과 조합을 캡슐화하여 객체가 어떤 클래스로부터 생성되었는지, 어떻게 생성되었는지에 대한 세부 정보를 숨깁니다. 예시로는 Singleton, Factory, Abstract Factory, Builder, Prototype 등이 있습니다.
2. 구조 패턴(Structural Patterns) - 객체 결합
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴으로, 클래스 간의 관계를 단순화하여 유연성과 효율성을 높입니다. 예시로는 Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy 등이 있습니다.
3. 행동 패턴(Behavioral Patterns) - 객체 간 커뮤니케이션
클래스나 객체 간의 알고리즘과 책임 분배에 관련된 패턴으로, 객체 간의 통신 방식과 책임 분배를 최적화합니다. 예시로는 Command, Iterator, Observer, Strategy, Template Method 등이 있습니다.
왜 디자인 패턴이 생겼을까요?
프로그래머가 만나는 문제는 대부분 다른사람들이 해결한 문제입니다. 족보, 교리 처럼 전문가들이 공략법을 만들어 놓았습니다. 개발 과정에서 반복적으로 나타나는 문제들을 효율적으로 해결하기 위해 만들어졌습니다. 맹신해서는 안되지만, 적절한 패턴을 사용하는것이 큰 도움이 됩니다.
이번 장에서는
GoF Design Pattern 에 소개된 패턴들을 다뤄볼 것입니다.
GoF Design Patterns
Gang of Four (GoF) design patterns are a set of 23 design patterns that were first described in the book “Design Patterns: Elements of Reusable Object-Oriented Software” by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. The book is commonly referred to as the “Gang of Four book”.
GoF(Gang of Four) 디자인 패턴은 "디자인 패턴"이라는 책에서 처음 설명한 23가지 디자인 패턴의 집합입니다: 재사용 가능한 객체 지향 소프트웨어의 요소"라는 에리히 감마, 리차드 헬름, 랄프 존슨, 존 블리시데스의 저서에서 처음 설명되었습니다. 이 책은 흔히 "4인조 책"이라고 불립니다.
GoF(Gang of Four) 디자인 패턴이란?
GoF 디자인 패턴은 'Design Patterns: Elements of Reusable Object-Oriented Software'라는 책의 저자인 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - 이 네 명의 공동 저자(Gang of Four, GoF)가 제시한 디자인 패턴입니다. 이들은 소프트웨어 설계에 있어 재사용 가능한 설계를 위한 23가지 패턴을 제안하였습니다.
10장 디자인 패턴에 들어오면서 3가지 분류를 말했습니다.
다시 정리해보면,
1. 생성 패턴 - 추상 객체 인스턴스화
이는 특정 개체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성이 목적입니다.
2. 구조 패턴 -
클래스나 객채를 조합하여 큰 구조를 만드는 패턴으로, 서로 다른 인터페이스를 가진 두 객체를 브릿지 하는 것이나 객체를 장식하는 역활을 합니다.
3. 행동 패턴
객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴으로, 클래스와 객체들이 상호작용하고 분산된 책임을 처리하는 방법을 정의합니다.
10.1.1. 싱글톤(Singleton)
Singleton 패턴은 1.생성패턴 중의 하나로, 클래스가 오직 하나만의 인스턴스를 가지도록 보장하는 디자인 패턴입니다.
이는 시스템 내에서 공유되어야 하는 자원이나 설정등을 관리할때 유용합니다.
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
pass
class NotSingleton: # 싱글톤 패턴을 안지킬경우 예시
pass
위 코드는 Singleton패턴을 메타클래스를 활용하여 파이썬에서 구현한 코드입니다.
코드를 설명하자면,
SingletonMeta 는 메타클래스 ( = 클래스의 클래스, 클래스를 생성하는 역할을 하는 클래스) 입니다.
Singleton 클래스의 인스턴스 생성을 제어합니다.
_instance는 = {} 로 딕셔너리로써 클래스의 인스턴스를 저장합니다.
SingletonMeta의 __call__ 메서드는 singleton 클래스가 인스턴스화 될 때 호출되는데, 이 때 _instances 딕셔너리를 확인하여 해당 클래스의 인스턴스가 이미 존재하는지 확인합니다.
만약 인스턴스가 존재한다면, 새로 생성하지 않고 기존에 생성된 인스턴스를 반환합니다.
이렇게 해서 Singleton클래스의 인스턴스가 항상 하나만 존재하도록 보장합니다.
마지막으로, Singleton 클래스는 SingletonMeta를 메타클래스로 가지므로, 이 클래스의 인스턴스는 오직 하나만 존재하게 됩니다. 이것이 바로 Singleton 패턴의 코드입니다.
실행 결과를 보면 instance1 과 instance2 모두 Notsingleton 클래스를 생성했습니다.
하지만 instance1 is instance2 는 False 로 나옵니다. 서로 다른 객채라는 것입니다.
반면 Singleton 패턴을 지킨 s1, s2 를 비교하면, True 로 어떻게하든 항상 Singleton 클래스의 인스턴스가 항상 하나만 존재하도록 합니다.
'CS - Roadmap.sh > 10. Design Patterns' 카테고리의 다른 글
10.5 Type Object Pattern (타입 객체 패턴) (2) | 2024.03.14 |
---|---|
10.4 Null Object Pattern(널 오브젝트 패턴) (1) | 2024.03.12 |
10.3 Dependency Injection (DI, 의존성 주입) (0) | 2024.03.11 |
10.2 Architectural Patterns(아키텍처 패턴) (0) | 2024.03.11 |