분류 전체보기

중재자 패턴 객체 간의 복잡한 상호작용을 캡슐화하는 디자인 패턴. 객체들 사이의 직접적인 참조와 통신을 줄이고, 이를 대신하여 중재자 객체를 통해 상호작용하도록 함으로써 객체 간의 결합도를 낮춘다. 구조 Mediator - 각 객체간 상호작용에 필요한 인터페이스를 정의한다. ConcreteMediator - Colleague 객체간의 협력 행동을 구현한다. 자신이 맡은 Colleague를 파악하고 관리한다. Colleague - 시스템 내의 객체들로, 서로 직접적으로 통신하지 않고 중재자를 통해 상호작용한다. 각 객체는 중재자에 대한 참조를 가지고 있어야 한다. 기본 인터페이스 public interface IMediator { void SendMessage(string message, Colleag..
전략 패턴 알고리즘의 실행 방법을 변경할 수 있게 해주는 패턴. 동일 계열의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만든다. 구조 Strategy - 제공하는 모든 알고리즘에 대한 공통된 연산들을 인터페이스로 정의한다. ConcreteStrategy - Strategy 인터페이스를 실제 알고리즘으로 구현한다. Context - Strategy 객체를 사용하는 클래스. 필요에 따라 Strategy 서브 클래스에 접근하는 방법을 정의한다. 기본 인터페이스 // 전략 인터페이스 정의 public interface IStrategy { void Execute(); } // 구체적인 전략을 구현하는 클래스들 public class ConcreteStrategyA : IStra..
이터레이터 패턴 컬렉션(예: 리스트, 스택, 트리 등)의 요소를 순회하는 표준 방법을 제공하는 디자인 패턴. 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 컬렉션들에 접근할 수 있는 다양한 순회 방법을 제공한다. 구조 Iterator - 다음 요소에 접근하거나, 다음 요소가 있는지 확인하는 메소드 등을 정의한다. ConcreteIterator - Iterator 인터페이스를 구현하는 클래스. 컬렉션의 특정 구현 방식(예: 배열, 연결 리스트)에 따라 이터레이터의 순회 로직을 구현한다. Aggregate -Iterator 객체를 생성하는 메소드를 정의하는 클래스. ConcreteAggregate -Aggregate 인터페이스를 구현하는 클래스. 실제 컬렉션을 관리하며, 해당 컬렉션에 대한 It..
인터프리터 패턴 주로 프로그래밍 언어의 해석기나 특정 문제를 해결하기 위한 도메인 전용 언어(Domain Specific Language, DSL)를 구현할 때 사용되는 디자인 패턴. 언어의 문법 규칙을 클래스로 표현하고, 해당 클래스의 인스턴스를 사용하여 문장을 해석하는 방식을 제공한다. 구조 Expression - 트리에 속한 모든 노드에 해당하는 클래스들이 공통으로 가져야 할 interpret 연산을 추상 연산으로 정의한다. TermianlExpression - 문법의 기본 요소를 해석하는 방법을 구현한다. 문장을 구성하는 모든 기호에 대해서 해당 클래스를 만들어야 한다. NonterminalExpression - 문법의 규칙을 구성하는 역할을 한다. Context - interpret 연산..
커맨드 패턴 요청을 객체로 캡슐화하여 사용자가 발생시킨 요청을 기록, 큐에 저장, 실행 취소 등을 가능하게 하는 디자인 패턴. 요청하는 객체와 요청을 수행하는 객체 사이의 결합도를 낮추고, 요청을 객체로 만들어 다양한 요구, 큐 또는 로그 요구에 쉽게 맞출 수 있다. 구조 Command - 실행될 모든 명령에 대한 인터페이스를 정의한다. ConcreteCommand - Command 인터페이스를 구현하며, Receiver 객체에 정의된 연산을 호출한다. Receiver -명령이 수행될 때 실제로 연산을 수행하는 객체.ConcreteCommand는 이 Receiver 객체의 특정 연산을 호출하여 요청을 수행한다. Invoker -명령을 요청하는 역할을 하는 객체.명령 객체를 저장하고, 명령을 실행하기 ..
문제 링크 분류 비트마스킹, 다이나믹 프로그래밍, 비트필드를 이용한 다이나믹 프로그래밍, 외판원 순회 문제 제출 일자 2024년 1월 6일 14:18:11 문제 설명 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자. 1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이 있다. (길이 없을 수도 있다) 이제 한 외판원이 어느 한 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아오는 순회 여행 경로를 계획하려고 한다. 단, 한 번 갔던 도시로는 다시 갈 수..
문제 링크 분류 다이나믹 프로그래밍 문제 설명 KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 위해 목적지까지 번호순서대로 일렬로 서서 걸어가도록 하였다. 이동 도중에 보니 아이들의 번호순서가 바뀌었다. 그래서 선생님은 다시 번호 순서대로 줄을 세우기 위해서 아이들의 위치를 옮기려고 한다. 그리고 아이들이 혼란스러워하지 않도록 하기 위해 위치를 옮기는 아이들의 수를 최소로 하려고 한다. 예를 들어, 7명의 아이들이 다음과 같은 순서대로 줄을 서 있다고 하자. 3 7 5 2 6 1 4 아이들을 순서대로 줄을 세우기 위해, 먼저 4번 아이를 7번 아이의 뒤로 옮겨보자...
책임 연쇄 패턴 요청을 처리할 수 있는 여러 객체들 사이에서 요청을 전달하는 디자인 패턴. 이 패턴을 사용하면 요청을 보내는 쪽과 이를 처리하는 쪽을 분리할 수 있으며, 요청을 처리할 객체가 누구인지 클라이언트는 몰라도 된다. 구조 Handler: 모든 처리기(Handler)에 공통적인 인터페이스를 정의한다. 이 인터페이스는 일반적으로 요청을 처리하는 메소드를 포함한다. ConcreteHandler: 실제 요청을 처리하는 클래스. 만약 해당 클래스가 요청을 처리할 수 없다면 다음 처리기로 요청을 전달한다. Client: 요청을 처리기 체인에 보내는 역할. 클라이언트는 체인의 어떤 부분이 요청을 처리하는지 알 필요가 없다. 기본 인터페이스 // Handler 인터페이스 public interface IHa..
NewtronVania
'분류 전체보기' 카테고리의 글 목록 (4 Page)