Software Architecture

    [Design Pattern] Decorator Pattern

    [Design Pattern] Decorator Pattern

    Decorator Pattern의 SOLID의 OCP(Open Closed Principle)을 원칙으로 하는 Pattern입니다. Decorator Pattern은 예시로 바로 살펴보도록 하겠습니다. 아래 UML을 보시면 음료를 상속받아 각 커피를 구현하고 있는 형태입니다. 이 구조를 Decorator Pattern이 접목되며 변화하는 과정을 살펴보려합니다. Beverage 추상클래스를 상속받아 각 커피 클래스 만들었습니다. 이제 판매만 하면 될까요? 점점 고객들의 요구가 많아지고 있습니다. 우유를 추가해달라는 고객, 휘핑크림을 넣어달라는 고객 등 여러 요구사항에 맞춰주고 가격을 따로 받으려 합니다. 그럼 어떻게 해야하나요? 가장 단순한 방법은 아래와 같은 구조가 되는 것입니다. 아래 UML은 휘핑크림..

    [Design Pattern] Mediator Pattern

    Mediator Pattern의 목적은 명확합니다. 중간 관리자를 하나두어 문제를 해결하겠다는 것입니다.서로 커뮤니케이션하고자하는 객체들이 있을 때 상호작용하려는 객체들의 집합의 구조가 복잡할 때 복잡성을 해소하면서 커뮤니케이션이 가능하도록 하는 목적의 패턴입니다. 매우 복잡한 커뮤니케이션 관계가 존재할 때 중앙집중적인 관리가 필요할 때 사용된다고 보시면 됩니다. 이러한 Mediator Pattern의 공항 관제탑을 생각하시면 좀 더 이해가 쉬울 것 같습니다. 인천공항에 이,착률 하려는 모든 항공사의 항공기간 서로 커뮤니케이션을 직접적으로 하는것이 아니라 중앙에 위치한 관제탑에서 정보를 수집하고 데이터를 전달함으로써 이,착륙 시 발생할 수 있는 많은 문제를 해결하고 있습니다. 위 예시와 같이 Mediat..

    [Design Pattern] Iterator Pattern

    Iterator Pattern Iterator Pattern은 여러 객체를 보관하고 있는 Aggregate Object가 있을 때 각 구성요소 하나 씩 방문하고자 할때 사용됩니다. 이 때 각 Element 내부를 접근하는 등의 표현은 외부로 노출되지 않습니다. 여기서 Aggregate Object에 대해 정리를 하자면 특정 객체를 하나의 단위로 그룹화 할 목적으로 다른 객체를 포함하는 객체를 입니다. Iterator Pattern은 구성요소들의 순회가 필요하거나 순회를 위한 일관된 인터페이스가 필요할 때 사용합니다. 또한 전체 구성요소에 대해 모두 알 필요없이 각 구성요소에 접근하기 위해서 사용되기도 합니다. 'Head First Design Pattern' 도서에서 소개하고 있는 예시를 사용해 설명하려..

    소프트웨어 설계의 부패

    소프트웨어 설계는 무엇일까? 소스코드 작성하기 전 UML 다이어그램을 작성하는 것? 가끔 몇몇 개발자 분들과 이야기를 할 때 설계는 UML 다이어그램을 작성하는 것이라는 말을 듣는다. 그럼 설계는 UML 다이어그램과 동일 시 할 수 있는가에 대해서 고민해보면 그렇지 않다 라는 결론이 나올 수 있다. 다이어그램은 설계에서 부수적인 부분일 뿐 설계 그 자체가 될 수는 없다고 생각한다. 소프트웨어 설계는 매우 추상적인 것이라 생각한다. 사용자 요구사항부터 시나리오, 모듈, 클래스, 메소드와 더불어 어떠한 형태와 구조를 가질 것인지 프로그램 전체의 형태, 구조와도 관련이 있다고 생각한다. 과거에 프로젝트를 개발할 때 가끔 머리속으로 설계에 대한 그림이 그려질 때가 있었다. 내 머리속에 들어있는 설계의 청사진이 ..

    [Design Pattern] Template Method Pattern

    Template method pattern 어느 식당에 들어가서 주문을 하려합니다. 이 식당에는 음식을 세트로 판매하고 있습니다. 세트 = 밥 + 국 + 메인반찬 + 추가반찬 위와 같이 세트는 4가지 메뉴로 구성이 되어있습니다. 밥 과 추가반찬은 동일하며 각 세트마다 국과 메인반찬이 변경된다고 합시다. 예를 들어 아래와 같이 세트들이 구성된다고 합시다. 제육세트 = 밥 + 된장국 + 제육볶음 + 추가반찬, 생선세트 = 밥 + 된장국 + 생선구이 + 추가반찬,해장세트 = 밥 + 콩나물해장국 + 해장에좋은반찬 + 추가반찬 여러분들이 각 세트를 선택함에 따라 국과 메인반찬이 변경됨을 알 수 있습니다. 위 상황을 여러분들이 디자인하고 구현한다고 생각해보시죠. 각 세트메뉴가 클래스가 되고 밥, 국, 메인반찬, 추..

    [UML] System Sequence Diagram

    [UML] System Sequence Diagram

    System Sequence Diagram은 System Sequence를 표현하기 위한 Diagram입니다. 무슨 말이냐 하면, System을 Black-Box로 두고 외부 Actor의 이벤트에 대해 현재 디자인 중인 시스템이 어떻게 반응하는지를 표현하기 위함입니다. Black-Box이기 때문에 내부적인 구조는 전혀 고려하지 않습니다. Input과 Output만 고려하는 것입니다. Output이 나오는 절차는 전혀 고려하지 않죠. 잘 생각해보시면 가장 중요한 부분이 use case란 것을 알 수 있습니다. 실제 사용자는 내부적으로 어떻게 동작을 하든 전혀 고려하지 않고 내가 원하는 결과가 무엇인지, 그 결과가 제대로 피드백 되는지만 신경쓰면 되는 것이죠. 아래 예제는 위키피디아의 이미지를 인용하였습니다..