Design Pattern 27

[디자인 패턴] 중재자 패턴 (Mediator Pattern)

중재자 패턴객체 지향 프로그래밍에서 객체 간의 상호작용을 간소화하고 캡슐화하는 데 사용되는 패턴객체들이 서로 직접 통신하는 것을 피하고 중앙에 있는 중재자 객체를 통해 통신하게 함으로써 여러 컴포넌트 간의 결합도를 중재자를 통해 낮출 수 있음  주요 구성 요소 1. Mediator중재자 역할을 수행하는 인터페이스를 정의 2. ConcreteMediatorMediator 인터페이스 구현체객체들 간의 상호작용을 조정 3. ColleagueMediator와 상호작용하는 객체일반적으로 Colleague 객체들은 Mediator 객체를 통해서만 서로 통신 4. ConcreteColleagueColleague 인터페이스 구현체해당 객체들은 Mediator를 통해 다른 Colleague들과 통신 중재자 패턴 구현 예..

Design Pattern 2024.06.30

[디자인 패턴] 책임 연쇄 패턴 (Chain-of-Responsibility Pattern)

책임 연쇄 패턴요청을 처리할 수 있는 여러 개의 처리 객체를 연결하여 요청을 처리할 수 있는 객체가 요청을 처리할 때까지 차례로 전달하는 행동 디자인 패턴해당 패턴은 다음과 같은 상황에서 유용하게 사용됨여러 객체가 요청을 처리해야 할 때: 요청을 처리할 수 있는 객체가 여러 개 있고, 각 객체가 자신이 처리할 수 없는 요청은 다음 객체로 전달하는 경우객체 간의 결합도를 낮춰야 할 때: 요청을 보내는 객체와 요청을 처리하는 객체 간의 결합도를 낮춰서 더 유연한 코드를 작성하고자 할 때동적으로 요청 처리 객체를 변경할 수 있어야 할 때: 실행 중에 요청 처리 객체를 동적으로 변경할 수 있도록 해야 할 때  주요 구성 요소 1. Handler요청을 처리하는 인터페이스 혹은 추상 클래스다음 Handler를 가리..

Design Pattern 2024.06.29

[디자인 패턴] 프록시 패턴 (Proxy Pattern)

프록시 패턴특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴원래 객체에 대한 대리자 역할을 수행하는 프록시 객체를 생성하여 원래 객체에 대한 접근을 제어하거나 추가적인 기능을 제공프록시를 거치게 하여 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 가능  주요 구성 요소 1. Subject프록시와 실제 객체가 공통으로 구현하는 인터페이스 혹은 추상 클래스 2. Real Subject프록시 객체가 대리하는 실제 작업을 수행하는 객체 3. Proxy프록시와 실제 객체가 공통으로 구현하는 인터페이스 혹은 추상 클래스 프록시 패턴 구현 예시이 예제에서는 가상 프록시를 사용하여 실제 객체의 생성을 지연시킴 1. Image 인터페이스 (Subject)   2.RealImage (Rea..

Design Pattern 2024.06.29

[디자인 패턴] 플라이웨이트 패턴 (Flyweight Pattern)

플라이웨이트 패턴메모리 사용을 최소화하면서 많은 객체를 효율적으로 지원하기 위해 사용되는 구조 디자인 패턴대량의 작은 객체를 생성하는 경우 유용하며 객체의 상태를 자주 변하는 속성(Extrinsit)과 변하지 않는 속성(Intrinsit)으로 분리하여 공통된 내재 상태를 공유함으로써 메모리 사용을 줄임  주요 구성 요소 1. Flyweight 인터페이스모든 Flyweight 클래스가 구현해야 하는 인터페이스로 주로 자주 변하는 속성(Extrinsit)을 인자로 받는 메서드를 정의 2. ConcreteFlyweight 클래스Flyweight 인터페이스 구현체변하지 않는 속성(Intrinsit)을 저장 3. FlyweightFactory 클래스Flyweight 객체를 생성하고 관리하는 역할요청된 Flywei..

Design Pattern 2024.06.29

[디자인 패턴] 퍼사드 패턴 (Facade Pattern)

퍼사드 패턴퍼사드 패턴은 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화하는 데 사용한 인터페이스로 구성된 높은 수준의 인터페이스를 제공하여 서브시스템을 사용자가 더 쉽게 사용 가능하도록 지원퍼사드 패턴 적용 시 여러 객체로 구성된 복잡한 서브시스템에 접근할 때 단일 인터페이스를 통해 접근할 수 있게 되어 코드의 가독성 및 유지보수성 향상 * Facade는 불어로 `건물의 입구 쪽 전경`을 의미건물의 전경을 봐서는 내부적으로 배관이 어떻게 설치되어있고 기둥이 어떤 방식으로 설치되었는지 모름  주요 구성 요소 1. Facacde복잡한 서브시스템의 간단한 인터페이스를 제공 2. Subsystem퍼사드가 호출하는 클래스들이며, 복잡한 로직을 포함퍼사드 객체가 이들 객체의 기능..

Design Pattern 2024.06.29

[디자인 패턴] 데코레이터 패턴 (Decorator Pattern)

데코레이터 패턴객체의 기능을 동적으로 확장할 수 있게 해주는 구조적인 디자인 패턴상속이 아닌 위임을 통해 런타임에 부가 기능을 추가하는 것이 가능해짐  주요 구성 요소 1. Component데코레이터와 실제 객체의 공통 인터페이스 혹은  추상 클래스ex) Shape 인터페이스 2. ConcreteComponent기본 기능을 구현하는 실제 객체ex) Circle, Rectangle 클래스 3. DecoratorComponent 인터페이스를 구현하거나 상속받는 추상 클래스해당 클래스는 실제 객체에 대한 참조를 포함(Dependecy Injection)하며, Component 인터페이스의 메서드를 위임(delegation)ex) ShapeDecorator 4. ConcreteDecoratorDecorator ..

Design Pattern 2024.06.29

[디자인 패턴] 컴포짓 패턴 (Composite Pattern)

컴포짓 패턴개별 객체와 객체 그룹을 동일하게 다루기 위한 디자인 패턴클라이언트 입장에서는 `전체`나 `부분`이나 모두 동일한 컴포넌트로 인식할 수 있도록 계층 구조를 만듦 (Part-Whole Hierarchy)단, 트리 구조를 사용하여 객체를 구성해야한다는 제약 조건 존재  주요 구성 요소 1. Component공통 인터페이스를 정의Compsite 및 Leaf가 구현해야하는 메서드를 선언 2. Leaf트리의 말단 요소로 실제 작업을 수행Leaf 노드는 자식 노드를 가질 수 없음 3. Composite자식 노드를 가지는 복합 노드자식 노드를 관리하며 Component의 메서드를 구현 컴포짓 패턴 구현 예시 1. Component 인터페이스 정의  2. Leaf 클래스 정의  3. Composite 클래스..

Design Pattern 2024.06.22

[디자인 패턴] 브릿지 패턴 (Bridge Pattern)

브릿지 패턴객체 지향 설계에서 구조적 디자인 패턴 중 하나로, 구현부에서 추상층을 분리하여 둘을 독립적으로 변형할 수 있도록 지원하나의 계층 구조일 때 보다 각기 나누었을 때 독립적인 계층 구조로 발전시킬 수 있음 시스템이 변화하는 요구사항에 유연하게 대처할 수 있도록 해줌 브릿지 패턴의 주된 목적은 추상화와 구현을 분리하여 두 부분이 독립적으로 변화할 수 있도록 하는 것이는 코드의 유지보수성과 확장성을 높이는 데 큰 도움을 줌  주요 구성 요소 1. Abstraction구현의 인터페이스를 정의하는 역할일반적으로 구현 객체에 대한 참조(레퍼런스)를 포함 (컴포지션)구현체에 위임하는 고수준의 작업들을 정의 2. RefinedAbstractionAbstraction의 확장판으로, 세부적인 기능을 추가하거나 ..

Design Pattern 2024.06.22

[디자인 패턴] 어댑터 패턴 (Adapter Pattern)

어댑터 패턴기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴서로 다른 인터페이스를 가진 두 클래스가 협업할 수 있도록 중간에 어댑터를 두어 호환성을 제공하는 구조적 디자인 패턴클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하여, 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작하도록 지원주로 레거시 코드를 새로운 시스템에서 사용하고자 할 때 유용해외여행 필수품인 플러그 어댑터를 생각하면 이해하기 쉬움  주요 구성 요소 1. Target 인터페이스클라이언트가 사용하려고 하는 인터페이스 2. Adapter타겟 인터페이스를 구현하고 어댑티(Adaptee)의 인터페이스를 호출하여 중간 역할 3. Adaptee변환되어야 할 기존 클래스 4. Client타겟 인터페이스를 사용하..

Design Pattern 2024.06.22

[디자인 패턴] 프로토타입 패턴 (Prototype Pattern)

프로토타입 패턴기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법기존 객체를 응용해서 새로운 인스턴스를 만들 때 유용특히 기존 인스턴스를 만들 때 DB 조회 혹은 API 호출 같이 비교적 시간이 오래 걸리는 작업이 선행되어야 하는 경우 유용매번 DB 조회 혹은 API 호출을 하면 시간이 오래 걸리기 때문에 이미 해당 작업을 수행해서 완성된 인스턴스를 복제한 후 일부 필드를 변경하는 방식으로 새로운 인스턴스를 만드는 방식객체 생성 비용을 줄이고, 객체 초기화 과정에서 발생하는 복잡성을 간단하게 처리 가능  주요 구성 요소 1. Prototype 인터페이스객체가 자신을 복제할 수 있도록 하는 인터페이스를 정의해당 인터페이스는 보통 clone() 메서드를 포함하며 자바에서 clone() 메서드는 prote..

Design Pattern 2024.06.22