들어가기 전 이 글은 인프런 백기선님의 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 인터페이..
들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 공부하며 작성한 글입니다. 전략(Strategy) 패턴 GOF : 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 작업을 수행하는 방법이 여러 가지일 때, 각 방법을 개별적인 클래스로 캡슐화한다. 캡슐화 되어 있는 것을 공통된 인터페이스로 추상화 한다. 로직을 수행하는 곳에서는 추상화된 인터페이스만 사용한다. 로직을 수행하는 코드는 바뀌지 않지만, Concrete Strategy만을 갈아끼면서 코드 변경 없이 다른 알고리즘을 실행할 수 있도록 해줌. 적용하면 좋은 경우 파라미터의 값에 따라 If - else 문으로 분기하면서 서로 다른 행위들을 하는 코드는 전략 패턴을 적용하기 좋음. Strategy 패턴을 사용하면, 새로운 종류의 전략을..