분류 전체보기

이터레이터 패턴 컬렉션(예: 리스트, 스택, 트리 등)의 요소를 순회하는 표준 방법을 제공하는 디자인 패턴. 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 컬렉션들에 접근할 수 있는 다양한 순회 방법을 제공한다. 구조 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..
프록시 패턴 프록시 패턴은 다른 객체의 기능을 대리하거나 접근을 제어하는 디자인 패턴이다. 이 패턴은 클라이언트가 실제 객체(RealSubject)를 직접 호출하지 않고, 대신 프록시(Proxy) 객체를 통해 요청을 중계한다. 이를 통해 RealSubject에 대한 접근을 제어하거나 추가적인 기능을 제공할 수 있다. 구조 Subject - RealSubject와 Proxy가 구현해야 할 메소드를 정의한다. 클라이언트는 이 인터페이스를 통해 RealSubject 또는 Proxy와 상호 작용한다. RealSubject - 실제로 서비스를 제공하는 클래스. Proxy는 이 클래스의 인스턴스에 대한 요청을 중계한다. Proxy -RealSubject 클래스의 기능을 대리하는 역할. Proxy는 RealSu..
플라이웨이트 패턴 객체를 가볍게 만들어 메모리 사용량을 줄이는 패턴. 자주 변하는 속성과 불변 속성을 분리하고 불변 속성을 재사용함으로써 메모리 사용량을 줄일 수 있다. 구조 Flyweight - Flyweight가 받아들일 수 있고, 부가적 상태에서 동작해야 하는 인터페이스를 선언한다. ConcreteFlyweight - Flyweight 인터페이스를 구현하고 내부적으로 갖고 있어야 하는 본질적 상태에 대한 저장소를 정의한다. ConcreteFlyweight 객체는 공유할 수 있는 것이어야 한다. UnsharedConcreteFlyweight - 공유될 필요가 없는 Flyweight 구현 클래스. FlyweightFactory - Flyweight 객체를 생성하고 관리하며, Flyweight 객체가..
NewtronVania
'분류 전체보기' 카테고리의 글 목록 (5 Page)