들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 데코레이터 패턴 GOF : 기존 코드를 변경하지 않고 부가적인 기능을 추가하는 패턴 데코레이터 패턴은 Delegation을 이용해 런타임에 기능 추가함. (상속을 사용하지 않아 더 유연함) 자주 변하는 것 : ConcreteDecorator (기능이 추가됨) 덜 변하는 것 : ConcreteComponent 상속으로 기능 확장을 하려고 할 때 상속의 한계점 때문에 발생하는 문제들이 있다. 이런 문제들은 Delegation을 이용해 해결할 수 있다. (즉, 데코레이터 패턴) 기본 기능 : 메세지 전송 상속 클래스 A : 메세지 스팸 필터링 기능 상속 클래스 B : 메세지 로깅 기능 만약 A,B 기능을 둘다 쓰고 싶으면? → 다..
들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 이터레이터 패턴 GOF : 집합 객체 내부 구조를 노출시키지 않고 순회하는 방법을 제공하는 패턴 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있음. 자바에서 사용하는 Iterator가 대표적인 이터레이터 패턴의 구현체가 될 것임. 변하는 것 : Aggregate + Iterator 코드 변하지 않는 것 : Iterator를 순회하는 클라이언트 코드 다음 경우에 Iterator 패턴 적용을 고려해 볼 수 있음. Aggregate가 다양한 방법으로 순회될 가능성이 있다. Aggregate의 종류가 바뀔 가능성이 있다. (Map → Tree 등) Component Iterator : 클라이언..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 중재자 패턴 GOF : 여러 객체들이 소통하는 방법을 캡슐화 하는 패턴 여러 컴포넌트(Collegue) 간의 결합도를 중재자를 통해 낮출 수 있음. 이 패턴에서는 구조가 중요한 것은 아님. 여러 객체들 간의 의사소통 하는 방법을 추상화 시켜서 객체들 간의 의존성 결합도를 낮춘다. 각 컴포넌트들이 직접 의사소통을 하는 것은 강하게 결합된 것임. → 코드의 변경 / 테스트 / 재사용이 어려워짐. 예를 들어 비행기들끼리 착륙할 때 '관제탑'이라는 '중재자'를 통해서 연락함. Component Mediator : 모든 Colleague로부터 요청을 받아들이고 이것을 처리할 객체임. 다른 클래스에 대한 의존성을 모두 몰아놓음. Colleag..
들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 커맨드 패턴 GOF : 요청을 캡슐화 하여 호출자(Invoker)와 수신자(Receiver)를 분리하는 패턴 요청을 처리하는 방법이 바뀌거나 추가되더라도 호출자의 코드는 변경되지 않는다. 자주 변경되지 않는 부분 : 호출자 자주 변경되는 부분 : 요청 처리 부분 Invoker(호출자)와 Receiver(수신자)를 디커플링 시키는 패턴이다. 디커플링의 수단으로 Command 객체를 활용한다. Invoker는 Command Interface에 의존. Command Interface는 Receiver를 호출. 새로운 Receiver나 기능이 추가될 때 마다 Concrete Command가 추가됨. Component Invoker ..
들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 복습하며 작성한 글입니다. Composite 패턴 GOF : 클라이언트가 그룹 전체 / 개별 객체를 동일하게 처리할 수 있는 패턴 클라이언트 입장에서는 어떤 객체가 전체 / 부분인지 모름 (계층 트리의 Root, Leap Node인지 구별 X) Composite 패턴은 'Tree 구조'를 구성해야 한다는 제약 사항이 있음. 디자인 Component Component : 트리 구조를 추상화 함. Composite : 그룹을 표현할 수 있는 객체임. (Root Node의 개념) 어떤 액션을 공통으로 제공할지 고려해야함. 내부적으로 Component 배열을 가짐. (타입은 Leaf가 아니라 반드시 Component임) 클라이언트는 Component 인터페이..