Programming/Design pattern (22) 썸네일형 리스트형 [Design pattern] 메멘토(Memento) 패턴 메멘토(Memento) 패턴Memento(메멘토) 패턴은 객체의 상태를 저장하고 복원할 수 있도록 하는 패턴입니다.캡슐화를 유지하면서도 객체의 내부 상태를 저장하고, 나중에 해당 상태로 되돌릴 수 있게 해줍니다.즉, Undo(되돌리기) 기능을 구현할 때 매우 유용한 구조입니다.Memento 패턴은 아래와 같은 경우에 사용할 수 있습니다.객체의 상태를 저장하고, 이전 상태로 롤백할 수 있어야 할 때Undo/Redo 기능이 필요한 경우 (텍스트 에디터, 게임 저장 등)캡슐화를 유지한 채로 상태 저장이 필요할 때 메멘토(Memento) 패턴 구성요소 Originator (원본 객체)저장할 상태를 가진 객체. 자신의 상태를 메멘토로 저장하거나 복원할 수 있습니다.Memento (메멘토 객체)저장된 상태를 나타내.. [Design pattern] 인터프리터(Interpreter) 패턴 인터프리터(Interpreter) 패턴 Interpreter(인터프리터) 패턴은 간단한 언어나 문법의 해석기(Interpreter)를 구성할 수 있도록 돕는 디자인 패턴이다.문법 규칙을 클래스 구조로 표현하고, 각 규칙을 객체화하여 해석하는 방식으로 구현됩니다.주로 DSL(Domain Specific Language), 간단한 수식, 명령어 해석기 등에 사용됩니다.Interpreter 패턴은 아래와 같은 경우에 사용할 수 있습니다. 표현 언어(문법)를 직접 만들고 해석해야 할 때정규 표현식, 수식 계산기, 명령어 해석기 등을 구현할 때언어의 문법이 자주 바뀌지 않고, 표현이 반복적으로 사용될 때인터프리터(Interpreter) 패턴 구성요소 AbstractExpression (추상 표현식)모든 표현식 클.. [Design pattern] 반복자(Iterator) 패턴 반복자(Iterator) 패턴 Iterator(반복자) 패턴은 컬렉션 객체의 내부 구조를 노출하지 않고 요소를 하나씩 순차적으로 접근할 수 있도록 해주는 디자인 패턴입니다. 리스트, 트리, 해시맵 등 복잡한 자료구조의 순회를 단순화할 수 있어 유용하게 사용됩니다.Iterator 패턴은 아래와 같은 경우에 사용됩니다.컬렉션의 내부 구조를 외부에 감추면서 순회하고 싶을 때다양한 컬렉션 구조에 대해 일관된 순회 인터페이스를 제공하고 싶을 때커스텀한 순회 방식을 정의하고 싶을 때 (예: 역순, 조건부 순회 등)반복자(Iterator) 패턴 구성요소 Iterator (반복자 인터페이스)다음 요소가 있는지 확인하고(next), 현재 요소를 반환(get/next)하는 기능 제공ConcreteIterator (구체 반.. [Design pattern] 방문자(Visitor) 패턴 방문자(Visitor) 패턴 Visitor 패턴은 구조를 변경하지 않고 객체에 기능을 추가할 수 있게 해주는 디자인 패턴입니다.객체의 클래스를 수정하지 않고, 새로운 작업(기능)을 추가하는 방법을 제공합니다.즉, 객체 구조를 변경하지 않고도 각 객체에 새로운 동작을 수행할 수 있게 해주는 패턴입니다.Visitor 패턴은 아래와 같은 경우에 사용합니다.객체 구조가 자주 바뀌고, 각 객체에 대해 여러 가지 동작을 추가해야 할 때클래스를 수정하지 않고 기능을 확장하고 싶을 때객체의 구조와 기능을 분리하고 싶을 때방문자(Visitor) 패턴 구성요소Visitor (방문자 인터페이스)각 객체에서 수행할 동작을 정의하는 인터페이스ConcreteVisitor (구체 방문자)실제 동작을 구현하는 클래스Element (.. [Design pattern] 템플릿 메소드(Template Method) 패턴 템플릿 메소드(Template Method) 패턴 Template Method 패턴은 알고리즘의 골격(템플릿)을 정의하고, 구체적인 단계(step)는 서브클래스에서 구현하도록 일부 로직을 위임하는 패턴입니다. 즉, 상위 클래스에 알고리즘 흐름을 고정해놓고, 세부 구현은 하위 클래스에서 처리하게 하는 방식입니다.Template Method 패턴은 다음과 같은 경우에 사용할 수 있습니다.알고리즘의 구조는 동일하지만, 일부 단계의 구현만 바뀌는 경우코드 중복을 피하면서 공통적인 흐름을 재사용하고 싶을 때하위 클래스가 알고리즘의 흐름을 바꾸지 않도록 강제하고 싶을 때템플릿 메소드 패턴 구성요소 AbstractClass (추상 클래스)템플릿 메서드를 정의하고, 공통 로직과 추상 메서드를 포함함ConcreteCla.. [Design pattern] 상태(State) 패턴 상태(State) 패턴 State 패턴은 객체의 상태에 따라 동작을 다르게 정의하는 디자인 패턴입니다.상태를 객체로 캡슐화하여, 상태 전환이 일어날 때 행위도 함께 바뀌도록 만듭니다.즉, if-else나 switch로 분기하지 않고, 상태별 클래스로 행동을 나눕니다.State 패턴은 아래와 같은 경우에 사용할 수 있습니다. 객체의 내부 상태에 따라 행동이 바뀌어야 할 때조건문이 상태 전환 로직에 많이 쓰이는 경우상태 전환이 복잡해지고, 각 상태마다 별도의 행동이 필요할 때상태(State) 패턴 구성요소1. Context (문맥)상태를 가지고 있고, 상태에 따른 행위를 위임하는 객체2. State (상태 인터페이스)상태별 행동을 정의하는 인터페이스3. ConcreteState (구체 상태)실제 상태를 나타.. [Design pattern] 중재자(Mediator) 패턴 중재자(Mediator) 패턴 Mediator패턴은 객체 간의 복잡한 상호작용을 중재자 객체 하나에 위임하여, 객체 간의 의존 관계를 줄이고 느슨한 결합을 가능하게 해주는 디자인 패턴입니다.즉, 여러 객체가 직접 통신하지 않고 중앙 통제 객체(Mediator)를 통해서만 상호작용하게 만드는 구조입니다.Mediator패턴은 다음과 같은 경우에 사용합니다.객체들이 서로 긴밀하게 연결되어 있어 의존성이 높고 복잡할 때객체 간 통신 로직을 하나의 클래스로 캡슐화하여 관리하고 싶을 때다대다 관계의 상호작용을 다루기 어려울 때 중재자(Mediator) 패턴 구성요소1.Mediator (중재자 인터페이스)객체 간의 상호작용을 조정하는 인터페이스 2.ConcreteMediator (구체 중재자)객체들 간의 통신 및 협.. [Design pattern] 책임 연쇄(Chain of Responsibility) 패턴 책임 연쇄(Chain of Responsibility) 패턴 Chain of Responsibility 패턴은 요청을 처리할 수 있는 객체들을 체인으로 연결하고, 요청을 순차적으로 전달하여 그 중 하나가 처리하도록 하는 패턴입니다.요청을 보낸 쪽은 어떤 객체가 처리할지 몰라도 되고, 객체들은 다음 객체로 책임을 넘길 수 있습니다.Chain of Responsibility 패턴은 다음과 같은 경우에 사용됩니다.요청을 처리할 수 있는 여러 객체 중 하나가 처리하게 하고 싶을 때요청 처리 객체를 동적으로 연결하거나 변경하고 싶을 때조건문(if-else, switch 등)이 너무 많아지는 상황을 개선하고 싶을 때책임 연쇄(Chain of Responsibility) 패턴 구성요소1. Handler (추상처리자).. 이전 1 2 3 다음