본문 바로가기

설계

(27)
[디자인 패턴] 플라이웨이트 패턴 (Flyweight Pattern) - python 예제 코드 플라이웨이트 패턴은 객체를 공유하여 메모리 사용을 줄이는 구조적인 디자인 패턴입니다. 이 패턴은 비용이 큰 객체를 여러 개 생성할 때 유용하며, 객체가 공유 가능한 상태와 고유한 상태를 가지고 있을 때 적용됩니다. 예를 들어, 문자열 처리를 하는 프로그램에서 동일한 문자열이 여러 번 사용된다면, 이를 하나의 객체로 생성하여 공유할 수 있습니다. 이렇게 하면 메모리 사용량이 감소하고, 성능도 향상될 수 있습니다. 1. 예제 코드 파이썬에서는 플라이웨이트 패턴을 구현하기 위해 클래스의 __new__ 메소드를 오버라이딩하고, 객체가 이미 존재하는 경우에는 이를 반환하도록 구현합니다. 이 때, 공유 가능한 객체는 클래스 변수로 선언하고, 고유한 상태는 인스턴스 변수로 처리합니다. 아래는 파이썬으로 구현한 플라이..
[디자인 패턴] 퍼사드 패턴 (Facade Pattern) - python 예제 코드 퍼사드 패턴은 객체 지향 디자인 패턴 중 하나로, 서브시스템의 복잡성을 감소시키기 위해 사용됩니다. 이 패턴은 간단한 인터페이스를 제공하여 서브시스템의 복잡성을 숨기고, 클라이언트와 서브시스템 간의 상호작용을 간소화합니다. 1. 설명 간단한 예를 들어보겠습니다. 가정용 전기 제품을 다루는 프로그램을 개발한다고 가정해봅시다. 이 프로그램에는 다양한 전기 제품이 있고, 각 제품에 대한 제어를 위해 해당 제품의 클래스를 만들어야 합니다. 예를 들어, 전등 클래스, 토스터 클래스, 에어컨 클래스 등이 있을 수 있습니다. 이러한 클래스를 모두 다루는 것은 복잡하고 번거로울 수 있습니다. 이런 경우, 퍼사드 패턴을 사용하여 해당 클래스들을 간단한 인터페이스로 숨길 수 있습니다. 2. 예제 코드 다음은 파이썬 코드 ..
[디자인 패턴] 데코레이터 패턴 (Decorator Pattern) - python 예제 코드 데코레이터 패턴(Decorator Pattern)은 객체 지향 디자인 패턴 중 하나로, 객체에 추가적인 기능을 동적으로 더할 수 있게 해주는 패턴입니다. 이 패턴은 기존 객체를 수정하지 않고도 객체의 기능을 확장할 수 있습니다. 1. 핵심 아이디어 데코레이터 패턴의 핵심 아이디어는 객체를 감싸는 래퍼(wrapper)를 생성하여 이 래퍼 객체가 추가적인 기능을 제공하도록 하는 것입니다. 래퍼는 기존 객체와 같은 인터페이스를 가지며, 기존 객체와 동일한 기능을 제공합니다. 래퍼 객체는 기존 객체에 덧붙여져서 새로운 객체를 형성합니다. 2. 예제 코드 다음은 파이썬으로 작성된 데코레이터 패턴 예제 코드입니다. 이 예제에서는 특정 함수의 실행 시간을 측정하는 기능을 래퍼 객체로 추가하는 예제입니다. import..
[디자인 패턴] 컴포지트 패턴 (Composite Pattern) - python 예제 코드 컴포지트 패턴은 객체지향 디자인 패턴 중 하나로, 객체들을 트리 구조로 구성하여 전체-부분 계층을 나타내는 패턴입니다. 이 패턴은 개별 객체와 복합 객체를 모두 동일하게 취급함으로써 클라이언트 코드의 일관성을 유지하면서 복잡한 계층 구조를 관리할 수 있습니다. 1. 간단한 설명과 구조 예를 들어, 파일 시스템에서 디렉토리와 파일은 모두 파일 시스템 트리의 노드입니다. 디렉토리는 하위 디렉토리와 파일을 가질 수 있으며, 파일은 데이터를 가지고 있습니다. 따라서 디렉토리와 파일을 모두 파일 시스템의 노드로 취급하고, 디렉토리의 경우 하위 노드를 포함하는 복합 객체로 취급하여 계층 구조를 유지할 수 있습니다. 1) 컴포지트 패턴의 구성 Component : Leaf와 Composite 객체가 공통으로 구현해야..
[디자인 패턴] 브릿지 패턴 (Bridge Pattern) - python 예제 코드 브릿지 패턴은 객체 지향 프로그래밍에서 구현하는 패턴 중 하나로, 클래스의 인터페이스와 구현부를 분리하여 두 개를 독립적으로 변경할 수 있도록 하는 디자인 패턴입니다. 이를 통해 시스템이 더욱 유연하고 확장성 있게 구현될 수 있습니다. 1. 두가지 계층 브릿지 패턴은 두 개의 계층으로 이루어집니다. 첫 번째 계층은 추상화 계층입니다. 이 계층은 클라이언트가 사용할 인터페이스를 정의합니다. 두 번째 계층은 구현 계층입니다. 이 계층은 추상화 계층이 정의한 인터페이스를 구현합니다. 추상화 계층과 구현 계층은 서로 독립적으로 변경될 수 있으며, 추상화 계층에서 구현 계층을 참조합니다. 이렇게 하면 구현 계층을 변경하더라도 추상화 계층은 변경되지 않으므로 클라이언트 코드를 수정할 필요가 없습니다. 또한, 구현 ..
[디자인 패턴] 어댑터 패턴 (Adapter Pattern) - python 예제 코드 어댑터 패턴(Adapter Pattern)은 서로 다른 두 개의 인터페이스를 가진 클래스들 간의 상호작용을 가능하게 해주는 디자인 패턴 중 하나입니다. 1. 핵심 아이디어 어댑터 패턴의 핵심 아이디어는 기존 클래스를 수정하지 않고, 그 클래스의 인터페이스를 다른 인터페이스로 변환시켜주는 것입니다. 이렇게 하면, 기존 클래스와 새로운 클래스 간의 호환성을 유지하면서, 코드를 재사용할 수 있게 됩니다. 파이썬으로 어댑터 패턴을 구현할 때는, 일반적으로 클래스를 상속하여 새로운 클래스를 만들어서 구현합니다. 이때, 새로운 클래스는 새로운 인터페이스를 구현하면서, 기존 클래스의 인스턴스를 내부에 포함시키는 방식으로 작성합니다. 2. 예제코드 다음은 파이썬으로 어댑터 패턴을 구현한 코드 예제입니다. class T..
[디자인 패턴] 싱글턴 패턴 (Singleton Pattern) - python 예제 코드 싱글턴 패턴(Singleton Pattern)은 객체 생성에 대한 디자인 패턴 중 하나입니다. 이 패턴은 어떤 클래스를 단 하나의 인스턴스만 생성하도록 보장하며, 해당 인스턴스를 전역에서 접근 가능하게 합니다. 1. 구현 방법 싱글턴 패턴을 구현하는 방법은 다양하지만, 대표적으로는 클래스 내부에 인스턴스 변수를 선언하고, 해당 클래스의 생성자 메서드를 private로 만드는 것입니다. 그리고 클래스 내부에서는 해당 클래스의 인스턴스가 생성되어있는지 확인하고, 생성되어 있지 않으면 인스턴스를 생성하는 정적 메서드를 제공합니다. 2. 예제 코드 다음은 파이썬으로 구현한 싱글턴 패턴 예제입니다. class Singleton: __instance = None # 클래스 내부에 유일한 인스턴스를 저장할 클래스 변..
[디자인 패턴] 프로토타입 패턴 (Prototype Pattern) - python 예제 코드 프로토타입 패턴 (Prototype Pattern) 은 객체 생성의 비용이 높은 경우, 기존에 생성된 객체를 복제하여 새로운 객체를 생성하는 패턴입니다. 이를 통해 객체 생성에 대한 비용을 줄일 수 있습니다. 1. 필요한 상황 1) 객체 생성에 필요한 자원이 많은 경우 2) 생성되는 객체의 종류가 다양한 경우 3) 객체 생성 과정이 복잡한 경우 2. 예제 파이썬에서는 객체를 복제하기 위해 copy 모듈을 사용할 수 있습니다. 이를 활용하여 간단한 프로토타입 패턴을 구현해보겠습니다. import copy class Prototype: def __init__(self): self._objects = {} def register_object(self, name, obj): self._objects[name] ..