본문 바로가기

분류 전체보기

(98)
[디자인 패턴] 비지터 패턴 (Visitor Pattern) - python 예제 코드 Visitor Pattern은 객체 지향 디자인 패턴 중 하나로, 객체를 탐색하고 객체의 각 요소에 대해 작업을 수행하는 방법을 제공합니다. 이 패턴은 객체의 구조와 작업을 분리하고, 새로운 작업을 추가하거나 객체 구조를 수정하지 않고도 작업을 수행할 수 있게 합니다. 패턴의 핵심 아이디어는 방문자(visitor)라는 개체를 사용하는 것입니다. 방문자는 객체 구조를 탐색하고 각 객체에 대해 특정 작업을 수행합니다. 이 때 객체는 방문자를 인자로 전달하고, 방문자는 객체의 메소드를 호출하여 작업을 수행합니다. 1. 예제 코드 Python 예제 코드를 통해 이해해보겠습니다. class Element: def accept(self, visitor): pass class ConcreteElementA(Eleme..
[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern) - python 예제 코드 템플릿 메서드 패턴은 객체 지향 디자인 패턴 중 하나로, 알고리즘의 구조를 정의하는 패턴입니다. 이 패턴을 사용하면 알고리즘의 골격을 정의하고, 각 단계에서 다른 구현을 제공하여 코드 중복을 줄일 수 있습니다. 패턴의 핵심은 "템플릿 메서드"라는 추상 메서드를 가진 추상 클래스를 정의하는 것입니다. 이 클래스는 알고리즘의 골격을 정의하고, 구체적인 구현은 서브클래스에서 제공합니다. 템플릿 메서드는 알고리즘의 각 단계를 호출하는데 사용되며, 서브클래스에서 구현될 수 있는 메서드도 호출됩니다. 예를 들어, 게임에서 캐릭터를 만드는 경우를 생각해보겠습니다. 캐릭터는 머리, 몸, 다리 등으로 구성되어 있으며, 이들 각각을 만드는 과정에서 공통적으로 수행해야 할 작업이 있습니다. 예를 들어, 캐릭터의 각 부분은 ..
[디자인 패턴] 스트래티지 패턴 (Strategy Pattern) - python 예제 코드 스트래티지 패턴(Strategy Pattern)은 객체 지향 디자인 패턴 중 하나로, 알고리즘을 정의하고 각각을 캡슐화하며, 이를 상호 교환 가능하도록 만드는 패턴입니다. 이 패턴은 프로그램에서 알고리즘을 선택할 때 유연성을 제공하며, 알고리즘의 적용을 담당하는 코드와 알고리즘 자체를 구현하는 코드를 분리하여 코드의 재사용성을 높이고 유지보수를 용이하게 합니다. 1. 예제 코드 간단한 예제로, 리스트에 대한 정렬을 수행하는 코드를 작성해보겠습니다. # Strategy pattern example for sorting a list class SortStrategy: def sort(self, data): pass class QuickSortStrategy(SortStrategy): def sort(self..
[디자인 패턴] 스테이트 패턴 (State Pattern) - python 예제 코드 State Pattern은 객체 지향 디자인 패턴 중 하나로, 객체의 내부 상태(state)에 따라서 객체의 행위를 변화시키는 방식을 제공합니다. 객체의 행위를 변화시키는 것은 객체의 메소드 호출을 통해서 이루어지지만, 이러한 호출은 객체의 상태에 따라 다른 메소드를 호출하게 됩니다. 이러한 상태를 캡슐화하고, 각 상태에 대한 행위를 별도의 객체로 분리하여 관리하게 됩니다. 1. 예제코드 주문 상태에 따라 다른 행위를 수행하는 주문 시스템을 구현한다고 가정해봅시다. 주문은 다음과 같은 세 가지 상태를 가질 수 있습니다. 주문 접수 대기중 주문 처리중 주문 완료 각 상태에 따라 수행되는 행위가 다르기 때문에, 이러한 상태를 객체로 분리하여 관리할 수 있습니다. 이를 State Pattern으로 구현하면, ..
[디자인 패턴] 옵저버 패턴 (Observer Pattern) - python 예제 코드 옵저버 패턴은 객체 간의 일대다 의존 관계를 정의하는 디자인 패턴 중 하나입니다. 이 패턴에서, 한 객체가 변경되면 그 객체에 의존하는 다른 객체들에게 알림이 전달되어 자동으로 업데이트 됩니다. 이를 통해 객체 간의 결합도를 줄이고, 유연한 설계를 가능하게 합니다. 1. 구성요소 Subject: 변경 사항이 발생하는 객체 Observer: 변경 사항을 알림 받는 객체 ConcreteSubject: Subject의 구현체 ConcreteObserver: Observer의 구현체 2. 예제 코드 파이썬으로 구현한 예제 코드는 다음과 같습니다. class Subject: def __init__(self): self._observers = [] def attach(self, observer): if observ..
[디자인 패턴] 메멘토 패턴 (Memento Pattern) - python 예제 코드 Memento 패턴은 객체의 상태를 저장하고, 나중에 복원하기 위한 패턴입니다. 이 패턴은 객체의 상태를 저장하는 Memento 객체와, 객체의 상태를 생성하는 Originator 객체, 그리고 Memento 객체를 관리하는 Caretaker 객체로 구성됩니다. 이 패턴을 사용하면 객체의 상태를 유지하면서, 상태를 수정하고 롤백하는 기능을 제공할 수 있습니다. 1. 예제 코드 예를 들어, 텍스트 에디터를 구현한다고 가정해봅시다. 이 때, 에디터의 상태는 사용자가 입력한 텍스트, 커서의 위치, 편집 모드 등이 될 수 있습니다. 이러한 상태를 저장하고 복원하기 위해 Memento 패턴을 사용할 수 있습니다. 다음은 Python으로 구현한 Memento 패턴 예제 코드입니다. class Editor: def ..
[디자인 패턴] 중재자 패턴 (Mediator Pattern) - python 예제 코드 중재자 패턴 (Mediator Pattern)은 객체들 간의 상호작용을 중재하는 객체를 도입하여 객체들 간의 결합도를 줄이고 유지보수성을 높이는 디자인 패턴입니다. 이 패턴에서 중재자(Mediator)는 객체들 간의 통신을 총괄하는 중앙 허브 역할을 하며, 객체들은 중재자를 통해 상호작용합니다. 이를 통해 객체들은 서로에 대해 알 필요 없이 중재자를 통해 상호작용할 수 있어서 결합도를 낮출 수 있습니다. 1. 예제 코드 아래는 중재자 패턴을 이해하기 위한 Python 코드 예제입니다. class Mediator: def __init__(self): self.colleague_1 = Colleague1(self) self.colleague_2 = Colleague2(self) def send_message..
[디자인 패턴] 반복자 패턴 (Iterator Pattern) - python 예제 코드 Iterator Pattern은 컬렉션에 저장된 요소를 순차적으로 접근하기 위한 디자인 패턴입니다. 이 패턴은 컬렉션과 반복 작업을 분리하여, 클라이언트 코드에서는 요소를 반복적으로 처리하는 로직만 작성하면 됩니다. 1. 구성요소 Iterator: 요소를 순차적으로 접근하기 위한 인터페이스를 제공합니다. 다음 요소에 접근하기 위한 next() 메서드와, 현재 요소의 존재 여부를 확인하기 위한 hasNext() 메서드가 포함됩니다. ConcreteIterator: Iterator 인터페이스를 구현하는 클래스입니다. 컬렉션에 대한 반복 작업을 수행합니다. Aggregate: 컬렉션의 인터페이스를 제공합니다. 요소를 추가하거나 삭제하는 메서드가 포함됩니다. ConcreteAggregate: Aggregate ..