디자인 패턴 17

Facade Pattern

퍼사드 패턴은 복잡한 시스템이나 서브시스템의 인터페이스를 단순화시켜 사용자에게 간단한 하나의 인터페이스를 제공하는 구조적인 패턴이다.이 패턴은 클라이언트가 복잡한 시스템 내부 구조를 알 필요 없이 특정 기능을 수행할 수 있도록 한다. 퍼사드를 사용해야 하는 상황복잡한 서브시스템이 존재하는 경우:시스템이 여러 개의 복잡한 서브시스템으로 구성되어 있을 때, 각 서브시스템을 단순한 인터페이스로 노출시켜야 하는 경우에 퍼사드 패턴을 사용할 수 있다.클라이언트와 서브시스템 간의 결합도를 낮춰야 하는 경우:서브시스템의 변경이나 교체가 빈번하게 발생하는 경우, 클라이언트와 서브시스템 간의 직접적인 결합을 피하고자 할 때 퍼사드를 도입할 수 있다.인터페이스의 간소화가 필요한 경우:여러 개의 복잡한 인터페이스를 단일한 ..

디자인 패턴 2024.05.12

Decorator Pattern

데코레이터 패턴은 객체의 구조를 변경하지 않고 기능을 동적으로 확장할 수 있는 디자인 패턴 중 하나이다.이 패턴은 객체에 새로운 기능을 추가하거나 변경할 때, 서브 클래스를 생성하지 않고도 구현할 수 있도록 한다. 데코레이터 패턴의 주요 구성 요소Component(구성 요소):기본 기능을 정의하는 인터페이스 또는 추상 클래스이다.ConcreteComponent(구체적인 구성 요소):Component의 구현 클래스로, 실제로 기본 기능을 구현한다.Decorator(데코레이터):Component를 상속하며, Component의 하위 클래스들을 데코레이팅하는 역할을 한다. 데코레이터는 동일한 인터페이스를 갖고 있어야 한다.ConcreteDecorator(구체적인 데코레이터):Decorator의 구현 클래스로,..

디자인 패턴 2024.05.05

Composite Pattern

컴포지트 패턴은 객체들을 트리구조로 구성하여 개별 객체와 객체 컬렉션을 동일하게 다루도록 하는 구조적 디자인 패턴이다. 컴포지트 패턴의 구성 요소Component (구성 요소):복합 객체와 개별 객체가 구현해야 하는 공통 인터페이스를 정의한다.복합 객체와 개별 객체를 동일하게 취급하기 위한 메서드들이 정의된다.Leaf (단일 객체):복합 객체의 구성 요소가 되는 개별 객체를 나타낸다.Component 인터페이스를 구현하고, 자식을 가질 수 없다.Composite (복합 객체):Leaf나 다른 Composite 객체를 자식으로 가질 수 있는 객체를 나타낸다.Component 인터페이스를 구현하면서 자식 객체를 관리하는 메서드들이 정의된다.컴포지트 패턴의 예시로 그래픽 객체를 다루는 시스템을 생각해볼 수 있..

디자인 패턴 2024.05.01

Command Pattern

커맨드 패턴은 명령을 객체로 캡슐화하여 관리할 수 있게 한다. 커맨드 패턴이 사용되는 상황요청과 수신자의 분리: 커맨드 패턴을 사용하면 요청을 하는 객체(클라이언트)와 실제 작업을 수행하는 객체(수신자)를 분리할 수 있다.연산의 매개변수화: 커맨드 객체를 사용하면 다양한 연산을 하나의 인터페이스를 통해 호출할 수 있다. 각 커맨드는 특정 연산을 수행하며, 이를 인터페이스로 추상화함으로써 클라이언트는 어떤 작업을 수행할지 결정할 수 있다.작업 취소 및 다시 실행(Undo/Redo): 커맨드 패턴을 사용하면 수행된 명령을 저장하고, 나중에 이 명령을 다시 실행하거나 취소할 수 있는 기능을 구현하기에 용이하다. 이는 Undo 및 Redo 기능을 지원하는 애플리케이션에서 유용하다.큐 형태의 명령 처리: 명령을 ..

디자인 패턴 2024.04.28

Chain Of Responsibility Pattern

책임 연쇄 패턴은 요청을 만족시킬 수 있는 객체를 연결하여 요청을 처리하는 패턴이다.장점요청을 보내는 객체와 요청을 처리하는 객체들 간의 결합을 피하며, 요청을 처리할 수 있는 객체를 동적으로 연결할 수 있게 한다.책임 연쇄 패턴이 사용되는 상황여러 객체가 순차적으로 처리되어야 할 경우요청이 처리할 수 있는 객체가 동적으로 변경되어야 하는 경우요청의 처리자를 명시적으로 지정하지 않고, 체인 상의 객체 중 하나가 처리를 담당할 수 있는 경우구성 요소Handler(처리자) 인터페이스 또는 추상 클래스요청을 처리하는 메서드를 선언한다.다음 처리자를 설정하는 메서드를 정의한다.ConcreteHandler(구체적인 처리자) 클래스Handler를 구현하며 실제로 요청을 처리하는 역할을 한다.자신이 처리할 수 있는 ..

디자인 패턴 2024.04.27

Bridge Pattern

"서로 독립적인 기능 계층과 구현 계층을 분리하고 싶을 때!"브릿지 패턴은 "기능(Abstraction)과 구현(Implementation)을 독립적으로 확장할 수 있도록 설계하는 패턴""하나의 기능이 다양한 구현을 가질 때" 매우 유용함클래스 수가 증가할 수 있으므로, 불필요하게 적용하지 않도록 주의해야 함📌 브릿지 패턴의 핵심 개념추상화 (Abstraction)인터페이스 또는 추상 클래스로, 클라이언트가 사용하게 될 주요 기능을 정의함구현부(Implementation)와 연결(Bridge)되어 있어, 기능을 전달구현부 (Implementation)실제 구현을 담당하는 인터페이스 또는 클래스추상화된 클래스에서 호출하여 기능을 실행추상화(Refined Abstraction)Abstraction을 확장한..

디자인 패턴 2024.04.10

Adapter Pattern

어댑터 패턴은 특정 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 객체 어댑터와 클래스 어댑터클래스 어댑터(Class Adapter): 구조: 클래스 어댑터는 어댑터 클래스가 타깃(Target) 클래스를 상속하면서 어댑터 패턴을 구현한다. 다중 상속을 지원하는 언어에서만 가능한 방식. 구현: 어댑터 클래스는 타깃 인터페이스를 구현하면서 어댑터 패턴의 메서드를 오버라이딩하여 타깃 클래스의 메서드를 호출한다. // 클래스 어댑터의 예제 interface Target { void request(); } class Adaptee { void specificRequest() { System.out.println("..

디자인 패턴 2024.04.10