디자인 패턴 33

[34] 디자인 패턴 목록 - 행동 디자인 패턴 - 비지터 패턴(Visitor Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서비지터 패턴(Visitor Patten)알고리즘들을 그들이 작동하는 객체들로부터 분리할 수 있도록 하는 행동 디자인 패턴이다.문제당신의 팀이 하나의 거대한 그래프로 구성된 지리 정보를 사용해 작동하는 앱을 개발하고 있다고 가정해본다.그래프의 각 노드는 도시와 같은 복잡한 객체를 나타낼 수 있지만 산업들, 관광 지역들 등의 더 세부적인 항목들도 나타낼 수 있다.만약에 노드들이 나타내는 실제 객체들 사이에 도로가 있으면 노드들은 서로 연결된다.각 노드 유형은 자체 클래스지만 각 노드는 객체이다.그래프를 XML 형식으로 내보내기 예시이다.어느 날 당신은 그래프를 XML 형식으로 내보내는 작업을 구현하는 일을 맡았다.처음에는 일이 매우 간단해 보였다.각 노..

[33] 디자인 패턴 목록 - 행동 디자인 패턴 - 템플릿 메서드 패턴(Template Method Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서템플릿 메서드 패턴(Template Method Patten)템플릿 메서드는 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 하는 행동 디자인 패턴이다.문제회사 문서들을 분석하는 데이터 마이닝 앱을 만들고 있다고 가정해본다. 사용자들은 앱에 다양한 형식(PDF, DOC, CSV)의 문서들을 제공하고 앱은 이러한 문서들에서 일관된 형식으로 의미 있는 데이터를 추출하려고 시도한다.앱의 첫 번째 버전은 DOC 파일과만 작동할 수 있었고, 다음 버전에서는 CSV 파일을 지원할 수 있었다. 한 달 후, 앱이 PDF 파일에서 데이터를 추출하도록 가르쳤다..

[32] 디자인 패턴 목록 - 행동 디자인 패턴 - 전략 패턴(Strategy Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서전략 패턴(Strategy Patten)알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴이다.문제어느 날 당신은 여행자들을 위한 내비 앱을 만들기로 했다. 앱의 중심 기능은 사용자들이 어느 도시에서든 빠르게 방향을 잡을 수 있도록 도와주는 아름다운 지도와 같다.앱에서 가장 많이 요청된 기능 중 하나는 자동 경로 계획 기능이었다.사용자가 주소를 입력하면 지도에 표시된 해당 목적지로 가는 가장 빠른 경로를 볼 수 있는 기능이었다.앱의 첫 번째 버전에서는 도로로 된 경로만을 만들 수 있었다.차를 타고 여행하는 사용자들은 만족했다.하지만 모든 사용자가 여가 중에 운전하는 걸 좋..

[31] 디자인 패턴 목록 - 행동 디자인 패턴 - 상태 패턴(State Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서상태 패턴(State Patten)객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 디자인 패턴입니다. 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수 있다.문제상태 패턴은 유한 상태 기계 10 개념과 밀접하게 관련되어 있다.유한 상태 기계 예시이다.이 패턴의 주요 개념은 모든 주어진 순간에 프로그램이 속해 있을 수 있는 상태들의 수는 유한하다는 것이다.어떤 고유한 상태 내에서든 프로그램은 다르게 행동하며, 한 상태에서 다른 상태로 즉시 전환될 수 있다.하지만 현재의 상태에 따라 프로그램은 특정 다른 상태로 전환되거나 전환되지 않을 수 있다.이러한 전환 규칙들을 천이(transition)라고도 하는데..

[30] 디자인 패턴 목록 - 행동 디자인 패턴 - 옵서버 패턴(Observer Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서옵서버 패턴(Observer Patten)여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의할 수 있도록 하는 행동 디자인 패턴이다.문제Customer(손님) 및 Store(가게)라는 두 가지 유형의 객체들이 있다고 가정해본다.손님은 곧 매장에 출시될 특정 브랜드의 제품(예: 새 아이폰 모델)에 매우 관심이 있다.손님은 매일 매장을 방문하여 제품 재고를 확인할 수 있다.제품이 매장에 아직 운송되는 동안 이러한 방문 대부분은 무의미하다.매장 방문 vs. 스팸발송 예시이다.반면 매장에서는 새로운 제품이 출시될 때마다 모든 고객에게 스팸으로 간주할 수 있는 수많은 이메일을 보낼 수 있다.이 수많은 이메일은 일부..

[29] 디자인 패턴 목록 - 행동 디자인 패턴 - 메멘토 패턴(Memento Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서메멘토 패턴(Memento Patten)객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 해주는 행동 디자인패턴이다.문제텍스트 편집기 앱을 만들고 있다고 가정해본다.당신의 편집기는 간단한 텍스트 편집 외에도 텍스트의 서식 지정, 인라인 이미지들의 삽입 등을 할 수 있다.어느 날 당신은 사용자들이 텍스트에 수행된 모든 작업을 실행 취소할 수 있도록 하기로 했다. 이 실행 취소 기능은 수년에 걸쳐 매우 보편화되었기 때문에 오늘날의 사용자들은 모든 앱에 이 기능이 있을 것이라고 가정해본다. 이 기능을 구현하기 위해 직접 접근 방식을 적용하기로 했다. 앱은 모든 작업을 수행하기 전에 모든 객체의 상태를 기록해 어떤..

[28] 디자인 패턴 목록 - 행동 디자인 패턴 - 중재자 패턴(Mediator Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서중재자 패턴(Mediator Patten)객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 행동 디자인 패턴이다.이 패턴은 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 한다.문제고객들의 프로필을 만들고 편집하기 위한 대화 상자가 있다고 가정해본다.이 대화 상자는 텍스트 필드, 체크 상자, 버튼 등과 같은 다양한 양식 컨트롤들로 구성된다.앱이 발전함에 따라 사용자 인터페이스 요소 간의 관계가 혼란스러워질 수 있는 예시이다.일부 양식 요소들은 다른 요소들과 상호 작용할 수 있다.예를 들어'저는 개가 있습니다' 확인란을 선택하면 개의 이름을 입력하기 위한 숨겨진 텍스트 필드가 나타날 수 있다. 또 다른 예시로 데이터를 저장하기 전에 ..

[27] 디자인 패턴 목록 - 행동 디자인 패턴 - 반복자 패턴(Iterator Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서반복자 패턴(Iterator Patten)반복자는 컬렉션의 요소들의 기본 표현(리스트, 스택, 트리 등)을 노출하지 않고 그들을 하나씩 순회할 수 있도록 하는 행동 디자인 패턴이다.문제컬렉션은 프로그래밍에서 가장 많이 사용되는 데이터 유형 중 하나이다.하지만, 객체 그룹의 단순한 컨테이너에 불과하다.다양한 유형들의 컬렉션들 예시이다.대부분의 컬렉션들은 그들의 요소들을 간단한 리스트들에 저장한다.그 중 일부는 스택, 트리, 그래프 및 기타 복잡한 데이터 구조들을 기반으로 한다.그러나 컬렉션이 어떻게 구성되어 있는지를 떠나서, 컬렉션은 그 요소들에 접근할 수 있는 어떤 방법을 다른 코드에 제공해야 한다.그래야 다른 코드가 이 요소들을 사용할 수 있다.같..

[26] 디자인 패턴 목록 - 행동 디자인 패턴 - 커멘드 패턴(Command Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서커멘드 패턴(Command Patten)커맨드는 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 디자인 패턴이다. 이 변환은 다양한 요청들이 있는 메서드들을 인수화 할 수 있도록 한다.요청의 실행을 지연 또는 대기열에 넣을 수 있도록 한다.또 실행 취소할 수 있는 작업을 지원할 수 있도록 한다.문제새로운 텍스트 편집기 앱을 개발하고 있다고 가정해본다.현재 하는 작업은 편집기의 다양한 작업을 위한 여러 버튼이 있는 도구 모음(툴바)을 만드는 것이다. 도구 모음의 버튼들과 다양한 대화 상자들의 일반 버튼들에 사용할 수 있는 매우 깔끔한 Button(버튼) 클래스를 만들었다.앱의 모든 버튼은 같은 클래스에서 파생되는 예시이다.이 버..

[25] 디자인 패턴 목록 - 행동 디자인 패턴 - 책임 연쇄 패턴(CoR, Chain of Responsiblity)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서책임 연쇄 패턴(CoR, Chain of Responsiblity)핸들러들의 체인(사슬)을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴이다.각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지를 결정한다.문제당신이 온라인 주문 시스템을 개발하고 있다고 가정해본다. 당신은 인증된 사용자들만 주문을 생성할 수 있도록 시스템에 대한 접근을 제한하려고 한다. 또 관리 권한이 있는 사용자들에게는 모든 주문에 대한 전체 접근 권한을 부여하려고 한다.당신은 약간의 설계 후에 이러한 검사들은 차례대로 수행해야 한다는 사실을 깨닫게 된다.당신의 앱은 사용자들의 자격 증명이 포함된 요청을 받을 때마다 시스템에 대해 사용자 인증을 시..