Design Pattern 27

[디자인 패턴] Reactor Pattern

Reactor Pattern이벤트 드리븐 아키텍처에서 널리 사용되는 패턴으로 동시에 들어오는 요청을 처리하는 이벤트 핸들링 패턴해당 패턴은 이벤트 루프를 사용하여 다양한 I/O 이벤트(읽기, 쓰기, 연결 수락 등)를 처리하며, 각 이벤트는 사전에 등록된 핸들러에 의해 처리단인 쓰레드와 Selector를 통해 이벤트 처리네트워크 애플리케이션에서 높은 성능과 확장성을 제공  주요 구성 요소 1. Selector여러 I/O 채널에서 발생한 이벤트를 감지하는 Event Demultiplexernon-blocking 모드로 설정된 채널들을 감시하고, I/O 이벤트(읽기, 쓰기, 연결 요청 등)가 발생했을 때 이를 감지하고 Dispatcher에게 알림 2. Dispatcher Selector가 감지한 이벤트를 적절..

Design Pattern 2024.07.15

[디자인 패턴] 방문자 패턴 (Visitor Pattern)

방문자 패턴객체의 구조와 객체가 수행해야 하는 작업을 분리하여, 새로운 작업을 추가할 때 구조를 수정하지 않고도 확장할 수 있도록 해주는 디자인 패턴주로 복잡한 객체 구조를 다룰 때 유용하며, 각 객체가 다양한 작업을 수행해야 할 때 적용 가능Double Dispatch 활용 가능객체가 두 번의 메서드 호출을 통해 자신에게 적합한 메서드를 결정하고 실행한다는 것을 의미이를 통해 객체 구조에 새 기능을 추가해야 할 때, 기존 클래스의 수정 없이 확장 가능여러 타입의 객체를 다루는 작업을 캡슐화하여 코드의 유지보수성과 확장성을 높임  주요 구성 요소 1. Elementaccept 메서드를 정의해당 메서드는 Visitor를 인자로 받아들이며, Visitor의 visit 메서드를 호출 2. ConcreteEle..

Design Pattern 2024.07.05

[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern)

템플릿 메서드 패턴콜백으로 상속 대신 위임을 사용하는 템플릿 패턴특정 알고리즘의 구조를 정의하되 해당 알고리즘의 일부 단계를 서브 클래스에서 구현하도록 위임알고리즘의 뼈대를 정의하고 일부 단계를 추상 메서드로 선언하여 서브 클래스에서 구체적인 동작을 제공하여 코드 재사용성을 높이고 알고리즘의 변화를 서브 클래스에서 쉽게 구현할 수 있도록 지원  주요 구성 요소 1. Abstract Class알고리즘의 뼈대를 정의하고 템플릿 메서드를 포함템플릿 메서드는 알고리즘의 구조를 정의하며 하나 이상의 추상 메서드를 호출 2. Abstract Method서브 클래스에서 구현해야 하는 메서드들 3. Concrete Class추상 클래스에서 정의된 추상 메서드를 구현하여 알고리즘의 구체적인 단계를 제공 템플릿 메서드 패..

Design Pattern 2024.07.03

[디자인 패턴] 전략 패턴 (Strategy Pattern)

전략 패턴여러 알고리즘을 캡슐화하고 상호 교환 가능하도록 지원하는 패턴으로써 코드의 유연성과 재사용성을 높일 수 있음다음과 같은 상황에서 유용함알고리즘이 다양할 때: 특정 기능의 구현이 다양하게 존재할 때 각 구현을 별도의 클래스로 분리알고리즘이 빈번히 변경될 때: 특정 기능의 구현이 자주 변경되거나 확장될 때 쉽게 변경.조건문을 대체할 때: 복잡한 조건문을 전략 패턴으로 대체하여 코드의 가독성을 높일 수 있음  주요 구성 요소 1. Context전략을 사용하는 클래스 2. Strategy다양한 전략의 공통 메서드를 정의 3. ConcreteStategy구체적인 전략 구현체 전략 패턴 구현 예시클라이언트가 필요에 따라 정렬 알고리즘을 변경하는 예시 1. Strategy  2. ConcreteStrateg..

Design Pattern 2024.07.03

[디자인 패턴] 상태 패턴 (State Pattern)

상태 패턴객체의 상태에 따라 동작을 다르게 하는 객체 지향 디자인 패턴해당 패턴 적용 시 상태를 객체로 캡슐화하여 상태 전환을 쉽게 관리할 수 있으며, 조건문을 사용하지 않고 객체의 행동을 변경 가능  주요 구성 요소 1. Context상태를 갖는 객체상태 변경을 위한 인터페이스를 제공하고 현재 상태를 유지 2. State상태를 나타내는 인터페이스 혹은 추상 클래스특정 상태에 따른 행동 정의 3. ConcreteStateState 인터페이스 구현체각 상태에 따른 행동 정의 상태 패턴 동작 방식Context는 State 인터페이스를 통해 현재 상태 객체 호출상태 전환 필요할 때 Context는 현재 상태를 다른 상태로 교체각 ConcreteState 클래스는 Context의 상태 변경을 유발할 수 있음 상..

Design Pattern 2024.07.03

[디자인 패턴] 옵저버 패턴 (Observer Pattern)

옵저버 패턴객체의 상태 변화를 감지하고 그 변화를 통지받는 다른 객체들에게 자동으로 전달하는 디자인 패턴주로 이벤트 기반 시스템이나 데이터 변경 통지를 구현할 때 유용publish-subscribe 패턴을 구현할 수 있음  주요 구성 요소 1. Subject상태 변화를 감지하는 객체로, 옵저버 객체들을 관리하고, 상태 변화가 있을 때 모든 옵저버들에게 알리는 역할 2. ObserverSubject 객체의 상태 변화를 통지받는 객체로, Subject 객체에 등록되어 있으며, Subject 객체의 상태가 변할 때 업데이트 메서드를 호출하는 역할 옵저버 패턴 구현 예시옵저버 패턴을 사용하여 크리켓 데이터를 관리하고 표시하는 시스템을 구현하는 예시용어 설명wicket은 아웃된 타자의 수overs는 현재 경기가 ..

Design Pattern 2024.07.02

[디자인 패턴] 메멘토 패턴 (Memento Pattern)

메멘토 패턴캡슐화를 유지하면서 객체의 내부 상태를 외부에서 저장하고 복원할 수 있게 지원하는 디자인 패턴객체 상태를 외부에 저장했다가 해당 상태로 다시 복구할 수 있음메멘토 패턴의 주요 목적은 원본 객체의 상태를 캡슐화하여 외부에서 직접 접근하지 않고도 저장하고 복원할 수 있게 하는 것  주요 구성 요소 1. Originator현재 상태를 저장하고 복원할 객체 2. Memento원본 객체의 상태를 저장하는 객체 3. Caretaker메멘토 객체를 관리하며 필요시 원본 객체의 상태를 복원 메멘토 패턴 구현 예시Originator 객체의 상태를 여러 번 변경하고, 상태를 메멘토 객체로 저장한 후, 나중에 이를 복원하는 과정 1. Originator  2. Memento  3. Caretaker  4. 클라이..

Design Pattern 2024.06.30

[디자인 패턴] 커맨드 패턴 (Command Pattern)

커맨드 패턴요청을 객체로 캡슐화하여 다양한 요청, queueing 작업, 로깅 등을 매개변수화 할 수 있게 지원요청을 캡슐화하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴명령어의 실행 취소(undo) 기능 또한 지원해당 패턴은 실행될 기능을 메서드 매개변수화시키고 이 기능을 객체 내 메서드 호출로 변경할 수 있도록 지원  주요 구성 요소 1. Command명령을 실행할 메서드 정의하는 인터페이스 2. ConcreteCommandCommand 인터페이스 구현체실제 명령을 수행하는 역할 3. Invoker명령을 실행할 때 사용할 인터페이스 제공 4. Receiver명령을 수행하는 실제 객체 Command 패턴 구현 예시 1. Recevier  2. Command 인터페이스  3. Co..

Design Pattern 2024.06.30

[디자인 패턴] 이터레이터 패턴 (Iterator Pattern)

이터레이터 패턴집합 객체 내부 구조를 노출시키지 않으면서 순회하는 방법을 제공하는 패턴리스트, 배열, 트리와 같은 컬렉션 객체 내부의 요소들에 순차적으로 접근할 수 있도록 하는 디자인 패턴다양한 컬렉션에 대해 동일한 방식으로 요소들을 탐색할 수 있는 장점을 지님  주요 구성 요소 1. Iterator요소들을 순차적으로 접근하기 위한 메서드들을 정의하는 인터페이스일반적으로 hasNext()와 next() 메서드가 포함 2. ConcreteIteratorIterator 인터페이스를 구현체실제 컬렉션의 요소들을 탐색하는 역할 3. Aggregate컬렉션 객체를 표현하는 인터페이스iterator를 생성하는 메서드 createIterator()를 정의 4. ConcreteAggregateAggregate 인터페이..

Design Pattern 2024.06.30

[디자인 패턴] 인터프리터 패턴 (Interpreter Pattern)

인터프리터 패턴언어의 문법을 정의하는 클래스를 이용하여 해당 언어의 문장을 해석하고 평가하는 디자인 패턴문법이 복잡하거나 자주 변경되지 않는 경우 유용반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장 가능주로 컴파일러나 스크립트 언어 인터프리터에서 사용됨  주요 구성 요소 1. AbstractExpression인터프리터에 의해 해석되는 공통 인터페이스 혹은 추상 클래스주로 interpret 메서드를 포함하며, 이 메서드는 특정 문법 규칙을 해석하는 역할 2. TerminalExpression문법의 기초 요소를 구현하는 클래스주로 숫자, 변수, 상수와 같은 기초적인 값들을 해석하는 역할 3. NonTerminalExpression문법의 복합 요소를 구현하는 클래스터미널 표현과 다른 비터미널 표현을 조..

Design Pattern 2024.06.30