메멘토 패턴이란?- 객체의 상태를 저장하고 필요할 때 복원할 수 있도록 하는 패턴- undo 기능 구현할 때 유용- 객체의 캡슐화를 유지하면서 이전 상태를 외부에서 보관하고 관리할 수 있도록 설계 구성 요소1. Original (원본 객체)자신의 상태를 저장할 수 있으며, 저장된 상태를 다시 복원할 수 있음createMemento() 메서드 사용하여 현재 상태를 Memento 객체로 저장restoreMemento() 메서드 사용하여 기존 상태로 복원 가능 2. Memento (메멘토–저장 객체)원본 객체 상태를 저장하는 역할상태 정보를 보관하며, 직접 변경할 수 없음(불변 객체) 3. Caretaker (관리자)여러 개의 Memento 객체를 보관하며, Originator가 요청할 때 적절한 상태를 제공..
Unity
미디에이터 패턴이란?- 객체 간의 직접적인 상호 작용을 줄이고, 중앙에서 통신을 중재하는 객체(미디에이터)를 도입하는 패턴 - 객체 간의 의존성을 줄여 유지보수성을 높이고, 결합도를 낮출 수 있음- 여러 객체가 서로 직접 통신하지 않고 미디에이터를 통해 간접적으로 소통 구성 요소1. Mediator (추상 미디에이터)객체 간의 통신을 중재하는 인터페이스 제공객체들이 직접 통신하는 대신, 미디에이터를 통해 소통하도록 유도 2. Concrete Mediator(구체적인 미디에이터)Mediator를 구현하여, 실제 객체 간의 통신을 관리객체 간의 관계를 관리하며 메시지를 중재 3. Colleague (참여 객체)미디에이터를 통해 다른 객체와 통신하는 구성 요소직접 다른 객체와 통신하지 않고, 미디에이터를 통해..
책임 연쇄 패턴이란?- 여러 개의 객체(Handler)를 체인 형태로 연결하여, 요청(Request)이 처리될 때까지 차례대로 전달하는 패턴 - 요청을 보낼 클라이언트(Caller)와 처리 객체(Handler)를 분리하여 유연성 높임- 특정 핸들러(Handler)가 요청을 처리할 수 없으면 다음 핸들러로 전달 구성 요소1. Handler (추상 핸들러)요청을 처리할 수 있는 공통 인터페이스다음 핸들러를 저장하고, 요청을 넘기는 기능을 제공 2. Concrete Handler(구체적인 핸들러)Handler를 상속받아 실제 요청을 처리하는 클래스요청을 처리할 수 있으면 처리하고, 못하면 다음 핸들러에게 전달 3. Client (클라이언트)요청을 보낼 객체첫 번째 핸들러에 요청을 전달하고, 필요하면 체인에서..
템플릿 메서드 패턴이란?- 알고리즘의 구조(뼈대)는 유지하면서, 일부 단계의 구현을 하위 클래스에서 정의할 수 있도록 하는 패턴- 즉, 공통된 알고리즘 흐름을 부모 클래스에 정의하고, 세부적인 구현은 자식 클래스에서 변경할 수 있도록 유도 - 알고리즘의 일정한 흐름을 유지하면서, 특정 부분만 병경 가능- 코드 중복 줄이고, 유지보수성을 높일 수 있음 구성 요소1. Abstract Class (추상 클래스)알고리즘의 뼈대(템플릿 메서드)를 정의일부 메서드는 abstract로 선언하여 하위 클래스에서 구체적으로 구현하도록 강제 2. Concrete Class(구체적인 클래스)Abstract Class를 상속바당 추상 메서드를 구체적으로 구현부모 클래스에서 정의된 알고리즘의 흐름을 따름 패턴 흐름1. Abst..
전략 패턴이란?- 행동(알고리즘)을 객체로 캡슐화하여, 동적으로 알고리즘을 변경할 수 있도록 하는 디자인 패턴- 즉, 실행 중에 알고리즘 변경 시 if-else/switch 문 없이 변경 가능 - 실행 중에 전략(알고리즘) 변경 가능- 코드 중복 줄이고, 결합도 낮출 수 있음 구성 요소1. Strategy (전략 인터페이스)특정 행동(알고리즘)의 인터페이스를 정의 2. Concrete Strategy (구체적인 전략)Strategy 인터페이스를 구현하여 각각의 알고리즘을 정의 3. Context (문맥 클래스)실행할 알고리즘(Strategy)을 내부에서 참조하며, 동적으로 전략 변경 가능 패턴 흐름1. Context는 Strategy 인터페이스를 통해 알고리즘을 실행2. Concrete Strategy가..
상태 패턴이란?- 객체 내부 상태에 따라 행동을 변경하는 디자인 패턴- 즉, 객체가 상태를 바꾸면 해당 상태에 맞는 행동이 자동으로 수행- if-else/switch 문 제거하고, 상태 전환 객체화하여 유지보수 쉽게 함 - 객체의 상태를 독립적인 클래스로 캡슐화하여 결합도를 낮출 수 있음 구성 요소1. State (상태 인터페이스)각 상태에서 수행할 동작을 정의하는 인터페이스 2. ConcreteState (구체적인 상태)State 인터페이스를 구현하여 특정 상태에서의 행동을 정의상태 변경이 필요하면 Context(문맥 객체)에게 요청 3. Context (문맥)현재 상태를 관리하며, State 객체에 행동을 위임상태가 변경되면 setState()를 통해 새로운 상태 객체 설정 패턴 흐름1. Contex..
옵저버 패턴이란?- 객체 간 일대다 관계를 설정하여, 한 객체의 상태 변경을 자동으로 여러 객체에 전파하는 디자인 패턴- 이벤트 기반 시스템에 서 자주 사용- 한 객체(Subject)의 상태가 변경되면, 등록된 여러 옵저버(Observer)들에게 자동으로 알림을 보냄 - 느슨한 결합을 유지하며, 객체 간 의존성 감소 구성 요소1. Subject (주체/발행자)옵저버(구독자)를 등록, 제거, 알림을 보내는 기능을 포함상태가 변경되면, 등록된 옵저버들에게 변경 사항 알림을 보냄 2. Observer (옵저버/구독자)update() 메서드 구현하여, Subject 상태 변경 감지하고 동작 수행 3. Concrete Subject (구체적인 주체/발행자)Subject를 상속하며, 옵저버 목록을 관리하고 변경되면..
이터레이터 패턴이란?- 컬렉션을 순차적으로 접근하는 방법을 제공하는 디자인 패턴- 내부 구현을 노출하지 않고 컬렉션의 요소를 하나씩 순회할 수 있음- 일관된 인터페이스를 통해 다양한 자료구조 순회할 수 있음 구성 요소1. Iterator (이터레이터 인터페이스)요소를 순회하는 데 필요한 기본 메서드 정의hasNext(다음 요소가 있는지 확인), next(다음 요소 반환) 등의 메서드 포함 2. Concrete lterator (구체적인 이터레이터 구현체)Iterator 인터페이스를 구현하며, 실제로 컬렉션의 요소를 순회 3. Aggregate (집합체 인터페이스)이터레이터를 생성하는 메서드 정의 4. Concrete Aggregate (구체적인 집합체 구현체)Aggregate 인터페이스를 구현하며, 이터..
인터프리터 패턴이란?- 특정 언어의 문법을 정의하고 해석하는 패턴- 특정 문법(표현식)을 해석할 수 있는 클래스를 설계하는 방식으로, 언어의 구문을 처리하거나 계산식을 평가하는 데 사용 구성 요소1. Abstract Expression (추상 표현식)모든 표현식(Expression)이 구현해야 할 인터페이스를 정의 2. Terminal Expression (터미널 표현식)기본적인 표현식(숫자, 변수 등)을 정의하고, 해석하는 클래스 3. Non Terminal Expression (비터미널 표현식)터미널 표현식들을 조합하여 더 복잡한 표현식을 구성하는 클래스 4. Context (문맥, 환경 클래스)해석에 필요한 정보를 저장하는 클래스연산자(+, -, *, /) 같은 역할을 수행 5. Client (클라..
커맨드 패턴이란?- 요청을 캡슐화하여 실행할 객체를 분리하는 디자인 패턴- 즉, 실행할 동작(명령)을 객체로 만들어 요청을 나중에 실행하거나, 실행 취소(Undo), 재실행(Redo) 기능을 쉽게 추가 가능. 구성 요소1. Command (커맨드 인터페이스)실행할 동작을 캡슐화하는 인터페이스Execute()와 undo() 같은 메서드 정의 2. Concrete Command (구체적인 커맨드 클래스)Command 인터페이스를 구현하며, 실제 실행할 동작을 정의실행 대상 객체(Receiver)를 포함하여 요청을 처리. 3. Receiver (수신자, 실제 동작을 수행하는 객체)커맨드 객체가 실행할 실제 동작을 수행하는 클래스 4. Invoker (요청을 실행하는 객체)커맨드 객체를 보관하며 execute(..