CS

전략 패턴 알고리즘의 실행 방법을 변경할 수 있게 해주는 패턴. 동일 계열의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만든다. 구조 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 -명령을 요청하는 역할을 하는 객체.명령 객체를 저장하고, 명령을 실행하기 ..
책임 연쇄 패턴 요청을 처리할 수 있는 여러 객체들 사이에서 요청을 전달하는 디자인 패턴. 이 패턴을 사용하면 요청을 보내는 쪽과 이를 처리하는 쪽을 분리할 수 있으며, 요청을 처리할 객체가 누구인지 클라이언트는 몰라도 된다. 구조 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 객체가..
퍼사드 패턴 여러 개의 서브 시스템이나 복잡한 클래스들을 간단한 인터페이스를 통해 외부로 노출시키는 패턴. 클라이언트에게 획일화된 하나의 인터페이스를 제공함으로써, 클라이언트는 복잡합 동작 과정을 알 필요가 없이 인터페이스의 기능을 사용할 수 있다. 구조 기본 인터페이스 //서브시스템 클래스 class SubSystem1 { public void Method1() { //구현 로직 } } class SubSystem2 { public void Method2() { //구현 로직 } } //퍼사드 클래스 class Facade { private SubSystem1 sub1; private SubSystem2 sub2; public Facade() { sub1 = new SubSystem1(); sub2 =..
NewtronVania
'CS' 태그의 글 목록 (2 Page)