본문 바로가기

전체보기51

다섯번 째, 디자인 패턴 정리 끝 디자인 패턴 정리가 끝났다.물론 모든 디자인 패턴을 내 머릿속에 다시 넣지는 못 했다.10년을 넘게 개발자로 살아왔지만 이런 부분이 참 어려운 것 같다.문제를 해결함에 있어 디자인 패턴이 미치는 영향이 적은 것은 아니지만 이것을 외워서 하는 건 아니고 실제로 겪어가면서 해야 하는데 예제 코드를 짠다고 해서 그게 온전히 내 것이 되고 외워지지는 않는다. 보면 알겠는데... 비슷한 사례로 나는 여러 언어를 하다 보면 for문도 헛갈리고 if문도 헛갈린다.디자인 패턴을 물어보면 따박따박 대답 잘하는 사람들을 보면 참 신기하다... 일단 이번에 정리하면서 내가 디자인 패턴을 잊거나 헛갈릴 때 다시 읽게 되면 이해가 바로 되도록 최대한 작성했는데 도움이 될지는 모르겠다. 그리고 누군가에게는 도움이 될 수 있는 내.. 2024. 6. 3.
방문자(Visitor) - 행동 패턴(Behavioral Patterns) 방문자 패턴은 개체의 구조와 개체가 수행하는 작업을 분리하는 디자인 패턴이다. 개체의 구조는 변경하지 않고, 새로운 작업을 개체에 추가할 수 있다. 방문자 패턴은 주로 개체 구조가 자주 변경되지만, 수행해야할 작업이 자주 변경된는 경우에 유용하다.  주요 개념 부터 살펴보자. 1. Visitor(방문자) : 개체 구조를 방문하여 수행할 작업을 정의하는 인터페이스이다.2. ConcreteVisitor(구체적인 방문자) : Visitor 인터페이스를 구현하며, 각 개체에 대해 수행할 작업을 정의한다.3. Element(요소) : Visitor를 받아들이는 인터페이스이다. 이 인터페이스는 accept 메서드를 정의한다.4. ConcreteElement(구체적인 요소) : Element 인터페이스를 구현하며 a.. 2024. 5. 25.
템플릿 메서드(Template Method) - 행동 패턴(Behavioral Patterns) 템플릿 메서드 패턴은 알고리즘의 구조를 정의하고, 알고리즘의 일부 단계를 서브 클래스에서 구현할 수 있도록 한다. 알고리즘의 뼈대는 상위 클래스에서 제공하고 세부 구현은 하위 클래스에서 제공한다. 주요 개념 부터 알아보자. 1. Abstract Class (추상 클래스) : 알고리즘의 뼈대를 정의하는 템플릿 메서드를 포함한다. 알고리즘의 각 단계를 정의하며, 일부 단계는 추상 메서드로 선언하여 서브 클래스에서 구현하도록 한다.2. Concrete Class (구체 클래스) : 추상 클래스에서 정의된 추상 메서드를 구현하여 알고리즘의 각 단계를 정의한다.  예시 소스코드를 살펴보자. 요리를 하는 과정을 템플릿 메서드 패턴으로 구현해본다. 요리는 재료준비, 요리, 설거지 이런 단계가 가장 큰 틀이다 각 세부.. 2024. 5. 25.
전략(Strategy) - 행동 패턴(Behavioral Patterns) 전략 패턴은 알고리즘을 정의하고 각각 캡슐화하여 상호 교체가 가능하도록 만드는 패턴이다. 특정 작업을 수행하는 여러 알고리즘이 있을때 런타임에 사용할 알고리즘을 성택할 수 있다. 핵심은 알고리즘을 사용하는 클라이언트와 알고리즘 자체를 분리하여 알고리즘을 독립적으로 변경할 수 있게 하는것이다. 주요 개념 부터 살펴보자.  1. Strategy (전략) : 알고리즘을 정의하는 공통 인터페이스이다.2. ConcreteStrategy (구체적인 전략) : 전략 인터페이스를 구현하며, 실제 알고리즘을 정의한다.3. Context (문맥) : Strategy 개체를 사용하는 클래스이다. Context는 전략 개체를 가지고 있으며, 이를 통해 알고리즘을 실행한다.  정렬 알고리즘을 전략 패턴으로 구현해본 소스코드를 .. 2024. 5. 25.
상태(State) - 행동 패턴(Behavioral Patterns) 상태 패턴은 개체가 내부 상태에 따라 행동을 변경하도록 하는 디자인 패턴이다. 개체의 상태를 개체로 캡슐화하여 상태 전환을 관리할 수 있다. 상태에 따라 다른 행동을 수행해야하는 경우에 유용한 패턴이다. 주요 개념부터 살펴보자. 1. Context(문맥) : 상태를 가지며, 현재 상태에 따라 행동을 수행한다. 상태 개체를 관리하고 상태 전환을 처리한다.2. State (상태) : 상태에 따른 행동을 정의하는 인터페이스이다.3. ConcreteState (구체적인 상태) : State 인터페이스를 구현하며, 상태에 따른 구체적인 행동을 정의한다. 예제 소스코드를 살펴보자.  문서(Document)에 대한 상태 관리이다. 초안 상태, 검토 중 상태, 승인 상태로 전환되어야 하고 각 상태에 따라 다른 행동을 .. 2024. 5. 25.
옵저버(Observer) - 행동 패턴(Behavioral Patterns) 옵저버 패턴은 개체의 상태 변화를 관찰하고, 그 변화가 발생했을 때 자동으로 통지(Notify)를 받아 처리할 수 있도록 하는 패턴이다. 주로 이벤트 기반 시스템에서 사용된다. 주요 개념부터 살펴보자 1. Subject (주제) : 상태를 가지고 있으며, 상태 변화를 옵서버들에게 알린다. 옵서버를 등록하고 제거하는 메서드를 제공한다. 2. Observer (옵저버) : 주제의 상태 변화를 관찰하고, 상태 변화가 발생했을 때 특정 행동을 수행한다. 3. ConcreteSubect (구체적인 주제 : 상태를 저장하고, 상태가 변경될 때 옵서버들에게 알린다.4. ConcreteObserver (구체적인 옵서버) : 주제의 상태 변화를 관찰하고, 상태가 변경될 때 행동을 수행한다. 날씨 모니터링 시스템 소스코드.. 2024. 5. 25.
메멘토(Memento) - 행동 패턴(Behavioral Patterns) 메멘토 패턴은 개체의 상태를 저장하고 나중에 복원할 수 있도록 하는 디자인 패턴이다. 상태를 외부에 저장하지 않고 개체 자체에서만 관리하면서 특정 시점의 상태로 되돌릴 수 있다. 주로 실행취소와 같은 기능을 구현할때 사용된다. 주요 개념 부터 살펴보자. 1. Originator : 상태를 겆장하고 복원할 개체이다. 현재 상태를 캡슐화하여 메멘토 개체를 생성하고, 메멘토 개체를 사용하여 상태를 복원한다.2. Memento : Originator 개체의 상태를 저장하는 개체 이다. 상태 정보를 캡슐화하여 외부에 노출하지 않는다.3. Caretaker : 메멘토 개체를 관리하며,메멘토 개체를 저장하고 필요할 때 Originator 개체의 상태를 복원한다. 텍스트 편집기에서 텍스트를 입력하고 실행 취소할 수 있.. 2024. 5. 25.
중재자(Mediator) - 행동 패턴(Behavioral Patterns) 중재자 패턴은 개체들이 직접 통신하지 않고 중재자 개체를 통해 통신하도록하는 디자인패턴이다. 개체간의 상호작용을 캡슐화 하여 개체간의 결합도를 줄이고, 개체간의 상호작용을 한 곳에서 관리할 수 있도록 한다. 주요 개념 부터 살펴보자 1. Mediator (중재자) : 개체 간의 상호 작용을 조정하는 인터페이스를 정의한다.2. ConcreteMediator (구체적인 중재자) : Mediator 인터페이스를 구현하며, 개체간의 상호작용을 실제로 조정한다.3. Colleague (동료개체) : 상호작용하는 개체들로, 중재자와 상호작용한다.4. ConcreteColleague (구체적인 동료 개체) : Colleague 인터페이스를 구현하며, 중재자를 통해 다른 개체들과 통신한다. 중재자 패턴이 가장 많이 쓰.. 2024. 5. 25.
반복자(Iterator) - 행동 패턴(Behavioral Patterns) 반복자 패턴은 컬렉션(집합체)의 내부 구조를 노출하지 않고도 그 안에 들어있는 요소들을 순회(traverse)할 수 있는 방법을 제공하는 디자인 패턴이다. 이 패턴을 컬렉션을 순회하는 로직을 컬렉션 개체 외부에 정의할 수 있으므로, 컬렉션의 내부 구조가 변경되더라도 순회 로직을 변경하지 않아도 된다. 주요 개념 부터 살펴보자 1. Iterator 인터페이스 : 컬렉션 요소를 순회하는 메서드를 정의한다.2. ConcreteIterator 클래스 : Iterator 인터페이스를 구현하며, 컬렉션 요소를 순회하는 기능을 제공한다.3. Aggregate 인터페이스 :Iterator 개체를 반환하는 메서드를 정의한다.4. ConcreteAggregate 클래스 : Aggregate 인터페이스를 구현하며 컬렉션을 .. 2024. 5. 25.
인터프리터(Interpreter) - 행동 패턴(Behavioral Patterns) 인터프리터 패턴은 주어진 언어의 문법을 나타내는 클래스를 이용해 문장을 해석하고 실해앟는 디자인 패턴이다. 주로 특정 도메인 언어 (DSL, Domain-Specific Language)의 구문 해석에 사용된다. 인터프리터 패턴은 언어의 각 기호를 클래스 하나로 표현하고, 이를 조합하여 문장을 해석하는 구조를 제공한다.  주요 개념 부터 알아보자 1. AbstractExpression (추상 표현) : 모든 표현식의 공통 인터페이스를 정의한다.2. TerminalExpression (종료 표현) : 문법의 기본 요소를 정의하며, 해석의 최종 단계를 나타낸다.3. NonTerminalExpression (비종료 표현) : 문법의 조합 규칙을 정의하며, 다른 표현식을 결합한다.4. Context (문맥) :.. 2024. 5. 25.
커맨드(Command) - 행동 패턴(Behavioral Patterns) 커맨드 패턴은 요청을 개체의 형태로 캡슐화 하여 요청에 필요한 모든 정보를 포함시킨다. 이를 통해 큐에 저장하거나 로그로 남기거나 실행 취소 할 수 있는 기능을 제공 할 수 있다. 커맨드 패턴을 사용하면 실행될 기능을 매개변수화 할 수 있으며 요청을 개체로 캡슐화 함으로써 실행할 작업을 독립적으로 관리할 수 있다.  주요 개념 부터 알아보자 1. Command 인터페이스 : 실행할 작업을 정의한다. 2. ConcreateCommand 클래스 : Command 인터페이스를 구현하고, 실제 실행할 작업을 정의 한다.3. Invoker 클래스 : Command 개체를 실행한다.4. Receiver 클래스 : 실제로 작업을 수행하는 개체이다.5. Client 클래스 : Command 개체를 생성하고, Invok.. 2024. 5. 25.
책임 연쇄(Chain of Responsibility) - 행동 패턴(Behavioral Patterns) 책임 연쇄 패턴은 요청을 처리할 수 있는 일련의 처리 개체(Handler)들을 연결해 두고, 각 개체가 요청을 처리할 수 있는 기회를 가지도록 하는 디자인 패턴이다. 이 패턴을 사용하면 요청을 처리할 개체를 명시적으로 결정하지 않고, 여러 개체가 처리할 수 있는 기회를 가지게 된다. 예시로 생각해보자 고객 지원 시스템이 있다. 고객 지원 시스템에서 고객의 요청을 처리하는 단계가 일반적으로 많이 들어가 있다. 고객의 요청은 처음에 일반 지원 직원에게 전달되고, 그 직원이 처리할 수 없는 요청은 상급자나 관리자에게 전달된다 이때 책임 연쇄 패턴으로 구현할 수 있다  주요 개념부터 알아보자  1. Handler(처리자) : 요청을 처리하거나 다음 처리자에게 전달한다.2. ConcreateHandler(구체적인.. 2024. 5. 25.