Software Architecture/Software design(22)
-
Decorator pattern (데코레이터 패턴)
Pattern 어떤 객체에 기능을 추가하고자 하는 경우, 해당 객체를 수정하지 않고 별도의 class를 정의하여 기능을 추가해야 하는 경우가 있습니다. 이런 경우 기존 class는 그대로 유지한체 기능을 추가하는 패턴이 'decorator pattern' 입니다. Decorator class는 장식하고자 하는 객체에 대한 reference를 유지/관리하는 class 이며, BComponent와 CComponent는 어떤 기능을 추가하여 '장식'한 concrete class입니다.
2022.02.28 -
Composite pattern (컴포지트 패턴)
Composite pattern primitive와 container를 둘 다 가지고 있는 class를 만들어 하나의 operation으로 class의 container가 지니고 있는 모든 객체들에게 동일한 연산을 순차적으로 수행하는 패턴입니다.
2022.02.28 -
Command pattern (커맨드 패턴)
command는 어떤 로직을 수행하는 전체 set 이며, 로직 수행을 위해 구성되는 상세 기능을 제공하는 action들을 가지고 생성됩니다. 위 그림에서 SearchCommand의 action은 Searcher가 되며, SearchCommand는 Search의 기능을 사용하여 Search 동작을 수행합니다. Invoker가 언제 어떤 방식으로 command를 실행할지를 결정하며, invoker는 message queue를 지닌 dispatcher일수도 있습니다.
2022.02.28 -
Chain of Responsibility
Chain of Responsibility 어떤 동작을 처리할 때 (위 그림의 경우 handle), 이를 내가 처리할 수 없다면(topic이 나랑 맞지 않다면) 이 요청을 나의 successor (처음 나를 생성할 때 주입해 준 successor)가 처리하도록 하는 pattern. 즉, 처리를 다음 successor에 넘기는 패턴
2022.02.28 -
Builder pattern (빌더 패턴)
Builder pattern "생성 과정" 부분만 별도의 class에 역할 위임을 하는 패턴입니다. 생성과정에 어떤 순서라던가, 기다림 등 다양한 로직이 필요한 경우 많이 사용하는 패턴입니다. Builder는 생성 과정에 필요한 사항들을 생성하는 역할을 수행합니다. 생성 과정의 로직은 director은 PhoneProvider가 수행합니다. client는 생성과정은 director에 위임하고, 생성 결과는 builder에서 바로 획득합니다.
2022.02.28 -
Bridge pattern (브릿지 패턴)
Bridge Pattern 구현과 추상을 분리하는 패턴입니다. 기능적인 추상화된 확장은 왼쪽의 상속 tree에 추가합니다. 반면에 플랫폼 종속적인 확장은 오른쪽 상속 tree에 추가합니다. player가 audio, video 등 기능적으로 추상화된 확장을 해야 하는 경우 왼쪽 상속 tree에 class를 추가합니다. 반면에 audio가 Android 혹은 iOS에서 구현되어야 할 때 Android의 audio 구현에 필요한 기능들과 iOS에서 audio 구현에 필요한 기능들은 오른쪽 상속 tree에 추가합니다. 왼쪽의 추상화된 기능의 확장에서는 오른쪽의 상세 플랫폼을 위한 기능을 사용하게 됩니다. 이렇게 기능의 확장과, 기능의 구현에 필요한 플랫폼 종속적인 부분의 확장을 따로 분리하는 것이 bridge..
2022.02.28