Software Architecture

    [Design Pattern] Adapter Patter

    [Design Pattern] Adapter Patter

    Adapter Pattern은 wrapper라고도 많이 불립니다. 어댑터라는 용어는 많이 들어보셨을 겁니다. '돼지코' 를 크게 예로 들 수 있을텐데요. 위키피디아에 설명된 정의는 아래와 같습니다. 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. Adapter 패턴은 기존에 지원하는 인터페이스 이외 다른 인터페이스 형태로 맞춰주기 위해 자주 사용됩니다. 클라이언트가 사용하는 타겟 인터페이스와 다른 인터페이스를 제공하는 모듈을 사용하고자 할 때 중간에 Adapter를 추가하여 기존에 사용하던 인터페이스와 동일한 형태로 제공받아 사용할 수 있습니다..

    [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가지 메뉴로 구성이 되어있습니다. 밥 과 추가반찬은 동일하며 각 세트마다 국과 메인반찬이 변경된다고 합시다. 예를 들어 아래와 같이 세트들이 구성된다고 합시다. 제육세트 = 밥 + 된장국 + 제육볶음 + 추가반찬, 생선세트 = 밥 + 된장국 + 생선구이 + 추가반찬,해장세트 = 밥 + 콩나물해장국 + 해장에좋은반찬 + 추가반찬 여러분들이 각 세트를 선택함에 따라 국과 메인반찬이 변경됨을 알 수 있습니다. 위 상황을 여러분들이 디자인하고 구현한다고 생각해보시죠. 각 세트메뉴가 클래스가 되고 밥, 국, 메인반찬, 추..