본문 바로가기

디자인패턴26

[디자인패턴] 행위 패턴(12) : 방문자(Visitor) 목차 방문자(Visitor) 방문자 패턴(Visitor Pattern)은 객체의 구조를 변경하지 않고도 객체에 새로운 연산을 쉽게 추가할 수 있도록 하는 디자인 패턴이다. 이 패턴은 주로 데이터 구조 내의 각 요소에 대해 수행될 연산을 객체 구조에서 분리하여, 새로운 연산을 추가할 때 기존 구조를 수정하지 않아도 되게 만든다. "방문자"라는 용어는 패턴의 구성 요소 중 하나인 'Visitor' 객체가 데이터 구조의 각 요소를 "방문"하여 특정 작업을 수행한다는 개념에서 유래한다. 패턴 미적용 예시 게임 개발 시나리오에서 플레이어가 아이템을 습득하거나 특정 지역에 진입하는 등의 이벤트를 처리하는 코드를 먼저 살펴보자. 방문자 패턴을 적용하지 않고, 이벤트를 처리하는 간단한 구조를 구현해본다. using S.. 2024. 3. 25.
[디자인패턴] 행위 패턴(11) : 템플릿 메소드(Template Method) 목차 템플릿 메소드(Template Method) 템플릿 메소드 패턴은 디자인 패턴의 일종으로, 알고리즘의 구조를 메소드에 정의하고, 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있도록 하여 전체 알고리즘의 구조를 변경하지 않고도 특정 단계를 재정의할 수 있도록 한다. 이 패턴의 이름은 "템플릿"이라는 단어에서 유래했다. 템플릿은 일종의 틀을 의미하는데, 템플릿 메소드 패턴에서는 알고리즘의 틀(구조)을 정의하고, 그 틀 안에서 일부 내용을 변경할 수 있도록 한다는 개념에서 비롯되었다. 단순히 추상 클래스라는 문법적인 틀의 목적과 가장 유사하다고 볼 수 있는 개념이다. 패턴 미적용 예시 먼저, 템플릿 메소드 패턴을 적용하지 않은 상황에서의 코드를 살펴보자. 이 예시에서는 간단한 게임 프로그램을 만드는 .. 2024. 3. 25.
[디자인패턴] 행위 패턴(10) : 전략(Strategy) 목차 전략(Strategy) 전략(Strategy) 디자인 패턴은 행동 디자인 패턴의 하나로, 실행 중에 알고리즘을 선택할 수 있게 해주는 패턴이다. 클라이언트가 직접 알고리즘을 선택할 수 있도록 하거나 알고리즘을 자동으로 선택하게 할 수 있다. 이 패턴의 핵심은 알고리즘의 사용과 알고리즘의 구현을 분리하는 것이다. 이로 인해 동일한 문제를 해결하는 다양한 방법들을 쉽게 교체할 수 있게 해준다. 예를 들어, 정렬이나 필터링과 같은 작업을 다양한 방식으로 구현할 수 있으며, 상황에 따라 가장 적합한 방법을 선택할 수 있다. 전략 패턴의 어원은 군사학에서 유래했다고 볼 수 있다. '전략'이라는 단어는 군대의 운용, 즉 큰 그림을 계획하는 방법을 의미한다. 소프트웨어 설계에서 이 용어는 비즈니스 로직이나 알고.. 2024. 3. 25.
[디자인패턴] 행위 패턴(9) : 상태(State) 목차 상태(State) 상태(State) 디자인 패턴은 객체의 내부 상태에 따라 객체의 행동을 변화시키는 패턴이다. 객체가 특정 상태에 있을 때만 수행할 수 있는 행동이 있거나, 상태에 따라 같은 이벤트에 다르게 반응해야 할 때 사용한다. 상태 패턴의 핵심은 상태를 클래스로 캡슐화하고, 객체의 상태 변화에 따라 이러한 상태 클래스들을 교체함으로써 객체의 행동을 동적으로 변경하는 것이다. 패턴의 기본 구성요소 Context(문맥): 현재 상태를 가지고 상태에 대한 사용자의 요청을 상태 객체로 위임한다. State(상태): 객체의 특정 상태에 대한 행동과 전환 조건을 정의하는 인터페이스다. Concrete State(구체 상태): 상태 인터페이스를 구현하는 클래스들로, 구체적인 상태별 행동 로직을 담당한다... 2024. 3. 25.
[디자인패턴] 행위 패턴(8) : 발행-구독(Publisher-Subscriber) 목차 발행-구독(Publisher-Subscriber) 발행-구독(영어: Publish-Subscribe) 디자인 패턴은 소프트웨어 아키텍처 패턴의 하나로, 메시지 발행 컴포넌트(발행자)와 메시지 수신 컴포넌트(구독자) 사이 결합도를 낮추기 위해 사용된다. 이 패턴의 핵심은 발행자가 메시지를 누구에게 보내야 하는지 몰라도 되며, 구독자는 어떤 발행자로부터 메시지를 받는지 알 필요가 없다는 데 있다. 즉, 발행자와 구독자 사이에 직접적인 연결 고리가 없어, 시스템의 유연성과 확장성을 향상시킨다. 패턴 미적용 예시 게임 개발 상황을 예로 들어보자. 게임 내에서 특정 이벤트(예: 캐릭터가 레벨업하는 이벤트)가 발생했을 때, 여러 시스템(예: UI, 경험치 로그, 업적 시스템)이 이를 감지하고 반응해야 한다고 .. 2024. 3. 25.
[디자인패턴] 행위 패턴(7) : 옵저버(Observer) 목차 옵저버(Observer) 옵저버 디자인 패턴은 객체의 상태 변화를 관찰하는 관찰자들(Observer)에게 변화를 알리기 위해 사용하는 디자인 패턴이다. 어원적으로, '옵저버(Observer)'는 '관찰자'를 뜻하는 영단어로, 이 패턴에서는 한 객체의 상태 변화를 관찰하고, 그 변화에 반응하는 객체들을 의미한다. 이 패턴의 주요 구성 요소는 다음과 같다: Subject: 상태 변화가 발생하는 객체. Observer들을 자신의 리스트에 등록하고, 상태 변화가 있을 때 등록된 Observer들에게 알린다. Observer: Subject의 상태 변화를 관찰하고, 변화가 있을 때 업데이트 받아야 하는 객체들. Subject의 상태 변화에 따라 동작하는 메소드를 구현한다. 패턴 미적용 예시 패턴을 적용하지 .. 2024. 3. 25.
[디자인패턴] 행위 패턴(6) : 메멘토(Memento) 목차 메멘토(Memento) 메멘토 디자인 패턴은 객체의 상태를 특정 시점에 캡처하여 나중에 해당 상태로 객체를 복원할 수 있도록 하는 디자인 패턴이다. 이 패턴의 명칭은 '기억을 보존하는 것'을 의미하는 라틴어 'Memento'에서 유래했다. 이 패턴은 주로 되돌리기 기능이나 스냅샷, 상태 복원 기능이 필요할 때 유용하게 사용된다. 메멘토 패턴은 크게 세 가지 기본 구성요소로 이루어져 있다: Originator(발생자): 자신의 상태를 저장하거나 복원할 수 있는 객체. Memento(메멘토): 발생자의 상태를 저장하는 객체. 발생자 외에는 이 객체에 접근할 수 없어야 한다. Caretaker(케어테이커): 메멘토를 저장하는 객체. 메멘토의 내용을 조작하거나 직접 접근하지 않고, 메멘토를 관리(저장하거나.. 2024. 3. 25.
[디자인패턴] 행위 패턴(5) : 중재자(Mediator) 목차 1. 중재자(Mediator) 중재자(Mediator) 디자인 패턴은 행동 패턴의 하나로, 객체 간의 복잡한 통신을 캡슐화하여 간소화하는 데 목적을 둔다. 패턴의 어원은 '중재자' 또는 '조정자'라는 뜻의 'Mediator'에서 유래했다. 이 패턴의 핵심 아이디어는 여러 객체 간의 직접적인 참조와 통신을 줄이고, 대신 하나의 중재자 객체를 통해 모든 통신이 이루어지게 하는 것이다. 이로 인해 각 객체는 다른 객체들과의 결합도를 낮추며, 코드의 유지 보수와 확장성을 개선할 수 있다. 중재자 패턴의 기본 구성 요소는 다음과 같다: Mediator: 중재자 역할을 하는 인터페이스. 객체 간의 통신 규약을 정의한다. ConcreteMediator: Mediator 인터페이스를 구현하는 구체적인 중재자 클래.. 2024. 3. 25.
[디자인패턴] 행위 패턴(4) : 반복자(iterator) 목차 반복자(iterator) 반복자(Iterator) 디자인 패턴은 객체 지향 프로그래밍에서 컬렉션 내의 요소들에 순차적으로 접근할 수 있는 방법을 제공한다. 이 패턴의 명칭은 '반복'이라는 뜻의 'Iterate'에서 유래했다. 컬렉션의 구현 방법을 알 필요 없이 그 내용을 순회할 수 있게 해주며, 이는 컬렉션의 구조 변경이 클라이언트 코드에 영향을 미치지 않도록 한다. 기본적인 구성요소로는 Iterator 와 Aggregate 인터페이스가 있으며, Iterator 인터페이스는 순회 로직을, Aggregate 인터페이스는 반복자 객체를 생성하는 메서드를 정의한다. 1. 패턴 미적용 예시 게임에서 여러 몬스터를 관리하는 경우를 생각해보자. 패턴을 적용하지 않았을 때는 몬스터 리스트를 직접 순회하며 각 몬.. 2024. 3. 25.