전체 글

개발 내용과 지식을 정리한 블로그입니다.
템플릿 메소드 패턴 알고리즘의 골격을 정의한 메소드를 제공하고, 일부 단계를 서브클래스에서 구현하게 함으로써, 구조를 유지하면서도 특정 부분의 변경을 가능하게 하는 디자인 패턴. 구조 AbstractClass - 서브클래스들이 재정의를 통해 구현해야 하는 알고리즘 처리 단계의 기본 연산(골격)을 정의한다. 그리고 알고리즘의 뼈대를 정의하는 템플릿 메서드를 구현한다. ConcreteClass - 서브클래스마다 달라진 알고리즘 처리 단계를 수행하기 위한 기본 연산을 구현한다. 기본 인터페이스 // 추상 기본 클래스 public abstract class AbstractClass { // 템플릿 메소드 public void TemplateMethod() { BaseOperation(); // 기본 작업 ..
전략 패턴 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 알고리즘을 사용하는 클라이언트와 상관 없이 독립적으로 알고리즘을 다양하게 변경할 수 있다. 구조 Strategy - 제공하는 모든 알고리즘에 대한 공통 연산들을 인터페이스로 정의한다. Context 클래스는 ConcreteStrategy 클래스에서 정의한 인터페이스를 통해 실제 알고리즘을 사용한다. ConcreteStrategy - Strategy의 인터페이스를 실제 알고리즘으로 구현한다. Context - ConcreteStrategy 객체를 통해 구성된다. Strategy 객체에 대한 참조를 관리하고, 실제로는 Strategy 서브클래스(ConcreteStrategy)의 인스턴스를 갖고 있음으로써 구체화한다. 또한 St..
옵저버 패턴 객체를 가볍게 만들어 메모리 사용량을 줄이는 패턴. 자주 변하는 속성과 불변 속성을 분리하고 불변 속성을 재사용함으로써 메모리 사용량을 줄일 수 있다. 구조 Subject - Observer(감시자)를 을 알고 있는 구독자. 임의의 개수의 감시자 객체는 Subject를 감시한다. Subject의 상태가 변경되면 Observer에게 알림을 보낸다. Observer - Subject의 상태 변화를 갱신하는 데 필요한 인터페이스를 정의한다. Subject의 변경에 따라 변화되어야 하는 객체들의 일관성이 유지된다. ConcreteSubject - ConcreteObserver 객체에게 알려주어야 하는 상태를 저장한다. 상태가 변경되면 해당 ConcreteObserver에 변경을 통보한다. Con..
상태 패턴 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴. 상태에 특화된 행동들을 분리해 낼 수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. 구조 Context - 사용자가 관심 있는 인터페이스를 정의한다. 객체의 현재 상태를 정의한 ConcreteState 클래스 객체를 유지 및 관리한다. State - Context의 각 상태별로 필요한 핸동을 캡슐화하여 인터페이스로 정의한다. ConcreteState 클래스들 - 각 서브클래스들은 Context의 상태에 따라 처리되어야 할 실제 행동을 구혀한다. 기본 인터페이스 public interface IState { void Handle(Context context); } public class ConcreteSta..
메멘토 패턴 객체의 상태를 이전의 상태로 복원할 수 있는 방법을 제공하는 디자인 패턴. 객체의 상태를 캡처하고 필요할 때 그 상태를 복원하는 기능을 통해, 객체의 내부 상태에 대한 직접적인 접근을 피하면서도 상태 정보를 외부에 저장하고 관리할 수 있다. 구조 Memento - 객체의 내부 상태를 저장하는 클래스. 객체의 상태를 저장하거나 복원하기 위해 사용된다. Originator - 원조 객체. 메멘토를 생성하여 현재 객체의상태를 저장하고, 메멘토를 사용하여 내부 상태를 복원한다. Caretaker - 메멘토의 보관을 책임지는 클래스. 메멘토의 내부 상태를 읽거나 접근하지 못하고 단지 보관만 한다. 기본 인터페이스 public class Memento { public string State { ge..
문제 링크 성능 요약 메모리: 4.14 MB, 시간: 0.03 ms 문제 설명 수학에서 칸토어 집합은 0과 1 사이의 실수로 이루어진 집합으로, [0, 1]부터 시작하여 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만들어집니다. 남아는 칸토어 집합을 조금 변형하여 유사 칸토어 비트열을 만들었습니다. 유사 칸토어 비트열은 다음과 같이 정의됩니다. 0 번째 유사 칸토어 비트열은 "1" 입니다. n(1 ≤ n) 번째 유사 칸토어 비트열은 n - 1 번째 유사 칸토어 비트열에서의 1을 11011로 치환하고 0을 00000로 치환하여 만듭니다. 남아는 n 번째 유사 칸토어 비트열에서 특정 구간 내의 1의 개수가 몇 개인지 궁금해졌습니다. n과 1의 개수가 몇 개인지 알고 싶은 구간을 나타내는 ..
중재자 패턴 객체 간의 복잡한 상호작용을 캡슐화하는 디자인 패턴. 객체들 사이의 직접적인 참조와 통신을 줄이고, 이를 대신하여 중재자 객체를 통해 상호작용하도록 함으로써 객체 간의 결합도를 낮춘다. 구조 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..
NewtronVania
Newtron의 프로그래밍 블로그