CSharp/Design Pattern(17)
-
Visitor (방문자)
알고리즘이 작동하는 객체와 알고리즘을 분리할 수 있게 해주는 행동 디자인 패턴 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나이다. 문제 하나의 거대한 그래프로 구성된 지리 정보로 작동하는 앱을 개발한다고 상상해 보자 그래프의 각 노드는 도시와 같은 복잡한 엔터티를 나타낼 수 있다. 또한 산업, 관광 지역 등과 같은 더 세분화된 항목을 나타낼 수도 있다. 노드가 나타내는 실제 개체 사이에 도로가 있는 경우 노드는 다른 노드와 연결된다. 어느 시점에서 그래프를 XML 형식으로 내보내는 작업을 구현해야 한다. 그래서 기존 노드 클래스에 노드별로 Export 기능을 구현하고 다형성을 통하여 재귀적으로 호출 하..
2022.03.25 -
Strategy (전략패턴)
일련의 알고리즘을 정의하고 각 알고리즘을 별도의 클래스에 넣고 해당 개체를 교환할 수 있도록 하는 행동 디자인 패턴이다. 실행 중에 알고리즘을 선택할 수 있다. 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 문제점 내비게이션 앱을 만들기로 했다. 앱에는 자동 경로 계획 기능이 있다. 사용자는 주소를 입력하고 지도에 표시된 해당 목적지로 가는 가장 빠른 경로를 볼 수 있어야 한다. 앱의 첫 번째 버전은 도로 위의 경로만 만들 었다. 앱의 두 번째 버전은 도보 경로를 만드는 옵션을 추가했다. 그 직후 사람들이 경로에서 대중 교통을 사용할 수 있도록 다른 옵션을 추가했다. 나중에 자전거 타는 사람을 위한 경로 구축을 추가할 계획이고..
2022.03.24 -
Observer
관찰하는 개체에 발생하는 모든 이벤트에 대해 여러 개체에 알리는 구독 메커니즘을 정의할 수 있는 동작 디자인 패턴 객체의 상태 변화를 관찰하는 관찰자들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 (publish/subscribe) 모델로 알려져 있기도 하다. 이 패턴의 핵심은 옵저버 또는 리스너(listener)라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다. 문제점 twitter 의 follow 기능을 처리 한다고 가정하자. client 가 내가 ..
2022.03.23 -
Mediator
개체 간의 혼란스러운 종속성을 줄일 수 있는 행동 디자인 패턴 개체 간의 직접 통신을 제한하고 중재자 개체를 통해서만 협력하도록 합니다. 이를 통해 통신 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킨다. 문제점 항공기들이 동시에 하나의 공항으로 들어오고 있다고 가정하자. 각 항공기들이 서로 무선 통신을 하여 누가 먼저 착륙할지를 정한다면 불필요한 혼선만 일어날 것이고 잘못하면 사고로 이어질 수도 있다. 해결책 각 항공기,헬기, 경비행기 등등은 서로 통신하지 않고 컨트롤 타워 하고만 통신을 한다. 컨트롤 타워는 전체 비행을 제어할 필요는 없고 누가 착륙하고 이륙할 지만 정하면 된다. class diagram ComponentA~D : mediator 의 참조를 가지고 있는 비즈니스 논리를 포함하는 ..
2022.03.22 -
Command
요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다 문제점 Button 을 만들었다고 가정해 보자 이 Button 의 종류가 여러가지가 있고 각각이 비슷해 보이지만 다른 기능을 수행 한다고 하자.가장 간단한 해결책은 버튼별로 하위 클래스 를 만드는 것이다.이러한 하위 클래스는 버튼 클릭시 실행되어야 하는 코드가 포함된다. 이런 형태가 되게 되면 기본 class ( Button) 의 코드가 변경되었을때 하위 클래스의 코드가 영향을 받게될 가능 성이 있다. 일부 작업들 (복사 / 붙혀넣기) 은 여러 위치에서 호출될 수 있다. 복사 도구모음복사 버튼복사 context menuCtrl+C ..
2022.03.21 -
Template Method
슈퍼클래스에서 알고리즘의 골격을 정의하지만 서브클래스가 구조를 변경하지 않고 알고리즘의 특정 단계를 재정의할 수 있도록 하는 행동 디자인 패턴 문제점 회사 문서를 분석하는 데이터 마이닝 응용 프로그램을 만들고 있다고 상상해 보십시오. 사용자는 다양한 형식(PDF, DOC, CSV)의 앱 문서를 제공하고 이러한 문서에서 일관된 형식으로 의미 있는 데이터를 추출하려고 합니다. 회사 문서를 분석하는 데이터 마이능 프로그램을 작성한다고 하자. 앱의 첫 번째 버전은 DOC 파일에서만 작동할 수 있다. 다음 버전에서는 CSV 파일을 지원할 수 있다. 한 달 후 에는 PDF 도 지원하도록 했다. 어느 시점에서 세 클래스에 유사한 코드가 많음을 알았다. 데이터 형식을 처리 하는 코드는 다르지만 흐름은 거의 동일 하다는..
2022.03.18