나는 이렇게 본다/파이썬 디자인 패턴 6

퍼사드 패턴

퍼사드 디자인 패턴 개요 퍼사드는 건물의 정면, 돋보이는 쪽을 의미. 즉, 건물의 외관만 신경 쓰지 내부 구조는 신경 쓰지 않는다. 복잡한 내부 로직을 감추고 클라이언트가 쉽게 접근할 수 있는 인터페이스 제공 구성요소 : 퍼사드, 시스템, 클라이언트 목적 서브시스템의 인터페이스를 통합시킨 단일 인터페이스를 제공해 클라이언트가 쉽게 서브시스템에 접근할 수 있게 한다. 단일 인터페이스 객체로 복잡한 서브시스템을 대체한다. 서브시스템을 캡슐화하는 것이 아니라 모든 서브시스템들을 결합한다. 클라이언트와 내부 구현을 분리한다. 퍼사드 어떤 서브시스템이 요청에 알맞는지 알고 있다. 컴포지션을 통해 클라이언트의 요청을 서브시스템 객체에 전달 클라이언트는 서브시스템이 아닌 퍼사드에만 요청 단, 퍼사드는 서브시스템을 캡..

팩토리 메소드, 추상 팩토리 패턴

팩토리 메소드 패턴 인터페이스를 통해 객체를 생성하지만 팩토리가 아닌 서브 클래스가 해당 객체 생성을 위해 어떤 클래스를 호출할지 결정한다. 팩토리 메소드는 인스턴스화가 아닌 상속을 통해 객체를 생성한다. 팩토리 메소드 디자인은 유동적이다. 특정 객체가 아닌 같은 인스턴스나 서브 클래스 객체를 반환할 수 있다. 팩토리 메소드 패턴은 객체를 생성하는 인터페이스를 정의하고 어떤 클래스를 초기화할지는서브 클래스의 결정에 맡긴다. 팩토리 메소드 구현 예 커리어 서비스(링크드인)과 앨범 서비스(페이스북)가 개별적으로 존재한다. 두 서비스는 공통적으로 개인 정보를 입력해야한다. 서비스 종류에 따라 알맞는 내용을 포함하는 프로필을 생성해보자 from abc import abstractmethod # Product 인..

심플 팩토리 패턴

팩토리 패턴 개요 팩토리란, 다른 클래스의 객체를 생성하는 클래스를 일컫는다. 클라이언트는 특정 ‘인자’와 함께 ‘메서드’를 호출하고 팩토리는 해당 객체를 생성하고 반환한다. 직접 객체를 생성하지 않고 팩토리를 사용하는 이유 객체 생성과 클래스 구현을 나눠 상호 의존도를 줄이기 위함. 클라이언트는 인터페이스와 메소드, 인자 등의 정보만 있으면 된다. 코드를 수정하지 않고 팩토리에 새로운 클래스를 추가할 수 있다. 이미 생성된 객체를 팩토리가 재활용할 수 있다. 팩토리 패턴 3가지 종류 심플 팩토리 패턴 - 인터페이스는 객체 생성 로직을 숨기고 객체를 생성 팩토리 메소드 패턴 - 인터페이스를 통해 객체를 생성하지만 서브 클래스가 객체 생성에 필요한 클래스를 선택 추상 팩토리 패턴 - 객체 생성에 필요한 클..

모노스테이트, 메타클래스, 싱글톤 구현예시

모노스테이트 싱글톤 패턴 The Monostate Singleton Pattern 객체 생성여부 보다는 상태와 행위에 초점을 맞춘 패턴 단일 객체가 아닌, 모든 객체가 같은 상태를 공유하는 패턴 __init__ 으로 구현 하는 방법 # __init__ 으로 구현하는 방법 class Mono: __shared_state = {"공유":"데이터"} def __init__(self): self.data = 1 self.__dict__ = self.__shared_state pass obj = Mono() obj.data = 9999 other_obj = Mono() print(f"{obj=}") print(f"{other_obj=}") """ 결과값. 서로 다른 인스턴스임을 확인할 수 있음 obj= other..

싱글톤 패턴, 게으른 초기화, 모듈 싱글톤

싱글톤 패턴 글로벌하게 접근 가능한 단 한 개의 객체만을 허용하는 패턴 주로 로깅이나 디비, 프린터 스풀러 등 동일한 리소스에 대한 동시 요청의 충돌을 막기 위해 사용 목적 클래스에 대한 단일 객체 생성 전역 객체 제공 공유된 리소스에 대한 동시 접근 제어 구현 코드 class Singleton(object): # __new__를 오버라이드 한다. def __new__(cls): # hasattr는 객체가 instance 속성을 가지고 있는지 확인한다. (객체의 존재 유무 확인) if not hasattr(cls, 'instance'): # 클래스 객체가 없다면 객체를 할당한다. cls.instance = super(Singleton, cls).__new__(cls) # 기존 또는 할당한 객체를 반환한다..

디자인 패턴 개요

객체지향 프로그래밍 파이썬의 모든 것은 객체다. → 파이썬의 클래스 인스턴스, 변수는 개별적인 메모리 공간에 저장된다. 객체 프로그램 내의 개체(entity)를 의미 개체는 다른 개체와 상호작용을 통해 목적 달성 클래스 속성(데이터)과 행동을 포함하는 객체를 정의 생성자로 객체 초기 상태 설정 일종의 템플릿으로 재사용 용이 메소드 객체의 행위를 의미 속성을 조작하고 작업을 수행 객체지향 프로그래밍의 주요 기능 캡슐화 객체의 기능과 상태를 숨김 클라이언트는 객체 구조와 상태를 직접 수정할 수 없고, 대신 수정을 요청 요청 종류에 따라 get, set 같은 특수 함수를 사용하여 내부 상태 변경 파이썬에서는 사실상 캡슐화 개념이 없지만 앞에 _를 붙여 접근 제한을 명시 다형성 객체는 함수 인자에 따라 다른 기..