디자인 패턴 16

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

브리지 패턴은 구현부와 추상화를 분리하여 두 부분이 독립적으로 변형될 수 있도록 하는 패턴이다. 장점 구현과 인터페이스를 완전히 결합하지 않았기에 구현과 추상화 부분을 분리할 수 있다. 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있다. 추상화 부분을 구현 구상 클래스가 바뀌어도 클라이언트에는 영향을 끼치지 않는다. 단점 디자인이 복잡해진다는 단점이 있다. 브리지 패턴이 사용되는 상황 추상화와 구현의 분리가 필요한 경우 시스템의 일부분이 다양한 방식으로 구현될 수 있고, 이 구현들이 독립적으로 확장 및 변경되어야 할 때. 클래스 계층 구조의 확장이 어려운 경우 상속을 통한 구현부의 변경이 어려운 경우에 브리지 패턴은 상속을 대신하여 사용될 수 있다. 예제 interface Renderer { ..

디자인 패턴 2024.04.10

Adapter Pattern

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

디자인 패턴 2024.04.10