목록설계패턴(Design Pattern) (17)
초보개발자 긍.응.성
이 글은 헤드퍼스트 디자인패턴과 GoF 디자인패턴을 읽고 정리한 글입니다.1. 추상 팩토리 패턴(Abstract Factory Pattern)구상 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체로 이루어진 제품군(families)을 생산하는 인터페이스를 제공합니다. 구상 제품 클래스는 서브클래스에서 생성합니다.1.1. 구성 요소AbstractFactoryProduct 생성을 위한 Factory 인터페이스로 AbstractFactory라 합니다.AbstractProduct 타입을 생성 후 반환하는 메서드를 갖습니다.ConcreteFactoryAbstractFactory를 구현한 구상 팩토리 클래스입니다.실제 ConcreteProduct를 생성하여 반환하는 메서드를 구현합니다.AbstractProduc..
이 글은 헤드퍼스트 디자인패턴과 GoF 디자인패턴을 읽고 정리한 글입니다.1. 팩토리 메서드 패턴(Factory Method Pattern)객체를 생성할 때 필요한 인터페이스를 생성하고, 어떤 클래스의 인스턴스를 만들지 서브클래스에서 결정합니다. 팩토리 메소드 패턴은 클래스 인스턴스를 만드는 일을 서브클래스에 위임합니다.1.1. 구성 요소Product팩토리 메서드를 통해 생성될 Object의 인터페이스입니다.ConcreteProductProduct 인터페이스를 구현하는 구현 클래스입니다.구현된 팩토리 메서드를 통해 반환될 Object 객체입니다.CreatorProduct 타입을 반환하는 팩토리 메서드가 정의되어있습니다.때에 따라 기본 ConcreteProduct를 반환하는 팩토리가 구현될 수 있습니다.팩..
이 글은 헤드퍼스트 디자인패턴과 GoF 디자인패턴을 읽고 정리한 글입니다.1. 데코레이터 패턴(Decorator Pattern)데코레이터 패턴은 객체의 추가 요소를 동적으로 더할 수 있는 패턴입니다. 서브클래스를 만드는 것 보다 데코레이터 패턴을 통해 훨씬 유연하게 기능을 확장할 수 있습니다.1.1. 구성 요소Component동적으로 기능이 추가될 객체의 인터페이스입니다.꼭 인터페이스가 아니라 추상클래스여도 상관없지만 가능한 인터페이스로 만드는 것을 권장합니다.ConcreteComponent기능이 추가될 수 있는 객체입니다. Component를 구현 또는 상속합니다.추후 설명드릴 Decorator들로 기능이 추가될 base 객체입니다.DecoratorComponent에 대한 참조를 가지며, Compone..
이 글은 헤드퍼스트 디자인패턴과 GoF 디자인패턴을 읽고 정리한 글입니다.1. 옵저버 패턴(Observer Pattern)한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다.1.1. 구성 요소Subject주제를 나타내는 인터페이스입니다.Observer가 자신을 옵저버 목록으로 등록하거나, 옵저버 목록에서 탈퇴하고 싶을 때에는 Subject 인터페이스의 메서드를 사용합니다.Observer옵저버로 쓰일 객체가 구현할 인터페이스입니다.Update 메서드를 통해 주제의 상태가 변경됨을 전달받습니다.ConcreteSubject주제 역할을 하는 구상 클래스입니다.Subject 인터페이스를 구현하며 옵저버 목록을 ..
이 글은 헤드퍼스트 디자인패턴을 읽고 정리한 글입니다.1. 전략 패턴(Strategy Pattern)전략 패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 합니다.전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있습니다.구성은 Context, Strategy 그리고 Strategy 구현체로 이루어져 있습니다.Context는 사용할 Strategy의 인터페이스 타입을 필드로 갖고있으며, 실제로 사용할 Strategy 구현체를 세팅하여 사용할 전략(알고리즘)을 유연하게 적용 또는 수정할 수 있습니다.1.1 적용 방법Context와 Strategy를 식별합니다. 바뀌지 않는 부분을 Context, 바뀌는 부분을 Strategy로 세팅합니다.Strat..
동적으로 추가할 수 있는 기능들을 덧붙여야 하는 상황에 사용하는 Decorator Pattern에 대해 알아보자. 문제점 이해를 위해 간단한 예시로 카페에서 음료를 주문 받는다고 하자. 음료중엔 아메리카노, 라떼 등을 포함해 많은 종류의 음료가 존재할 것이다. 이는 Beverage라는 추상클래스를 만들고 이를 상속하는 여러 종류의 음료를 생성하여 표현할 수 있다. 음료에는 휩추가, 시럽 추가등의 첨가물을 추가할 수 있다. 이러한 모든 경우에 대해 생겨날 수 있는 조합의 음료들을 정의한다면 중복되는 코드가 많아진다는 문제점이 있다. 이러한 문제를 해결하기 위해 abstract class인 Beverage에 속성으로 첨가물의 추가여부에 대한 변수를 가지게 만들어 중복되는 클래스의 생성을 줄일 수 있다. 하지..