분류 전체보기
-
Visitor Pattern(방문자 패턴)STUDY/디자인패턴 2025. 3. 3. 19:31
방문자 패턴이란?객체 구조를 변경하지 않고, 그 객체들에 대해 새로운 기능을 추가할 수 있게 해주는 행동 디자인 패턴이다. 객체의 구조가 자주 바뀌지 않지만, 객체에 대한 새로운 작업을 자주 추가해야 하는 경우 유용하다. 문제 XML 내보내기라는 새로운 기능을 추가할 때, 기존 클래스에 기능을 추가하게 되면 기존 코드에 영향을 많이 주고 복잡성을 증가시킬 수 있다. 또한, 다른 기능이 추가되는 경우 기존 클래스에 변경이 자주 발생하게 되어, 다른 부분에 영향을 줄 수 있게 된다. 해결방문자 패턴을 사용해 각 객체를 처리하는 별도의 Visitor 클래스를 만들고, 객체들에 대한 작업을 외부에서 수행한다.각 객체들은 accept() 메서드를 통해 Visitor 클래스를 받아들이고, 이를 통해 외부에서 작업을..
-
Template Method Pattern(템플릿 메서드 패턴)STUDY/디자인패턴 2025. 3. 3. 19:06
템플릿 메서드 패턴이란?부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 재정의할 수 있도록 하는 행동 디자인 패턴 템플릿 메서드 패턴은 알고리즘을 일련의 단계들로 나누고, 이러한 단계들을 메서드들로 변환한 뒤, 단일 템플릿 메서드 내부에서 이러한 메서드들을 호출한다. 이러한 단계들은 abstract(추상)이거나 일부 디폴트 구현을 가지게 된다. 알고리즘을 사용하기 위해 클라이언트는 자신의 자식 클래스를 제공해야 하고, 모든 추상 단계를 구현해야 하며, 필요하다면 (템플릿 메서드를 제외한) 선택적 단계 중 일부를 오버라이드(재정의)해야 한다. 모든 자식 클래스는 추상 단계들을 구현해야 한다.선택적 단계들에는 이미 어떤 디폴트..
-
Strategy Pattern(전략 패턴)STUDY/디자인패턴 2025. 3. 3. 18:48
전략 패턴이란?실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행동 디자인 패턴으로, 특정 작업을 다양한 방식으로 수행하는 클래스를 선택한 후 모든 알고리즘을 전략들(strategies)이라는 별도의 클래스들로 추출한다. 구조Context구상 전략 중 하나에 대한 참조를 유지하고 전략 인터페이스를 통해서만 이 객체와 통신한다. 알고리즘을 실행해야 할 때마다 연결된 전략 객체의 실행 메서드를 호출한다. Strategy콘텍스트가 전략을 실행하는 데 사용하는 메서드를 선언한 전략 인터페이스 ConcreteStrategies구상 전략은 콘텐스트가 사용하는 알고리즘의 다양한 변형들을 구현한다. Client특정 전략 객체를 만들어 콘텍스트에 전달한다. 예시Strate..
-
State Pattern(상태 패턴)STUDY/디자인패턴 2025. 2. 16. 22:54
상태 패턴이란?객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 디자인 패턴으로, 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수 있다. 상태 패턴은 객체의 모든 가능한 상태들에 대해 새 클래스들을 만들고 모든 상태별 행동들을 이러한 클래스들로 추출한다. 콘텍스트라는 원래 객체는 모든 행동을 자체적으로 구현하는 대신 현재 상태를 나타내는 상태 객체 중 하나에 대한 참조를 저장하고 모든 상태와 관련된 작업을 그 객체에 위임한다. 구조Context구상 상태 객체 중 하나에 대한 참조를 저장하고 모든 상태별 작업을 구상 상태 객체에 위임한다. 콘텍스트는 상태 인터페이스를 통해 상태 객체와 통신하며, 새로운 상태 객체를 전달하기 위한 세터를 노출한다. State..
-
Observer Pattern(옵저버 패턴)STUDY/디자인패턴 2025. 2. 16. 22:40
옵저버 패턴이란?옵저버(관찰자)들이 관찰하고 있는 대상자의 상태가 변화가 있을 때마다 대상자는 직접 목록의 각 관찰자들에게 통지하고, 관찰자들은 알림을 받아 조치를 취하는 행동 디자인 패턴으로, 주로 발행(Publisher) - 구독(Subscriber) 모델을 구현할 때 사용되며 이벤트 기반 프로그래밍에서 많이 사용된다. 관찰 대상자 : Subject, Publisher 관찰자 : Observer, Subscriber관찰 대상자와 관찰자는 1:N 관계 흐름Observer들이 Subject에 등록됨Subject의 상태 변경Subject가 모든 등록된 Observer들에게 변경을 알림각 Observer는 전달받은 변경 사항에 따라 동작을 수행 구조Publisher출판사는 다른 객체들에 관심 이벤트들을 발행..
-
Memento Pattern(메멘토 패턴)STUDY/디자인패턴 2025. 2. 16. 22:14
메멘토 패턴이란?객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 해주는 디자인 행동 패턴 주요 구성 요소Originator : 상태를 저장하고 복원하려는 객체Memento : 상태를 저장하는 객체Caretaker : Memento를 저장하고 관리하는 객체 구조Originator자신의 상태에 대한 스냅샷들을 생성할 수 있으며, 필요시 스냅샷에서 자신의 상태를 복원할 수 있다. Memento오리지네이터의 상태 스냅샷 역할을 하는 값 객체이다. 중첩된 클래스들에 기반한 구현의 경우 메멘토 클래스는 오리지네이터 내부에 중첩된다. 이것은 오리지네이터가 메멘토의 필드들과 메서드들이 비공개로 선언된 경우에도 접근할 수 있도록 한다. 반면에, 케어테이커는 메멘토의 필드들과 ..
-
Mediator Pattern(중재자 패턴)STUDY/디자인패턴 2025. 2. 2. 20:37
중재자 패턴이란?객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 행동 디자인 패턴으로, 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 한다. 즉, 중재자 패턴은 서로 독립적으로 작동해야 하는 컴포넌트 간의 모든 직접 통신을 중단한 후, 중재자 객체를 호출하여 적절한 컴포넌트들로 리다이렉션하여 컴포넌트들이 간적접으로 협력하도록 한다. 이 패턴을 사용하면 컴포넌트 사이의 복잡한 M:N 의존관계가 중재자와의 M:1 의존관계가 되므로 결합도를 감소시키게 된다. 구조Mediator중재자 인터페이스 ConcreteMediator중재자 인터페이스를 구현한 구상 클래스로, 다양한 컴포넌트 간의 관계를 캡슐화한다. 구상 클래스들은 자신이 관리하는 모든 컴포넌트에 대한 참조를 유지하고 그들의 수명 주..
-
Iterator Pattern(반복자 패턴)STUDY/디자인패턴 2025. 2. 2. 19:44
반복자 패턴이란?컬렉션의 요소들의 기본 표현(리스트, 스택, 트리 등)을 노출하지 않고 그들을 하나씩 순회할 수 있도록 하는 행동 디자인 패턴 반복자 패턴은 컬렉션의 순회 동작을 반복자라는 별도의 객체로 추출한다. 반복자 객체는 알고리즘 자체를 구현하는 것 외에도 모든 순회 세부 정보들(현재 위치 및 남은 요소들의 수 등)을 캡슐화하기 때문에 여러 반복자들은 서로 독립적으로 동시에 같은 컬렉션을 통과할 수 있다. 일반적으로 반복자들은 컬렉션의 요소들을 가져오기 위한 하나의 주 메서드를 제공하고, 클라이언트는 이 메서드를 더 이상 아무것도 반환하지 않을 때까지 계속 실행할 수 있다. 구조Iterator컬렉션의 순회에 필요한 작업들을 선언한 반복자 인터페이스 ConcreteIterator컬렉션 순회를 위..