패턴 11

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

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

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

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

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

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

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

[24] 디자인 패턴 목록 - 구조 패턴 - 프록시 패턴(Proxy Patten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서프록시(Proxy)다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴이다. 원래 객체에 대한 접근을 제어한다.이로 인해서 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 한다.문제객체에 대한 접근을 제한하는 이유는 무엇인지, 이 질문에 답하기 위하여 방대한 양의 시스템 자원을 소비하는 거대한 객체가 있다고 가정해본다.이 객체는 필요할 때가 있기는 하지만, 항상 필요한 것은 아니다.데이터베이스 쿼리들은 정말 느릴 수 있다는 예시이다.실제로 필요할 때만 이 객체를 만들어서 지연된 초기화를 구현할 수 있다.그러면 객체의 모든 클라이언트들은 어떤 지연된 초기화 코드를 실행해야 한다.불행히도 이것은 아마도 ..

[23] 디자인 패턴 목록 - 구조 패턴 - 플라이웨이트 패턴(Flyweight Pattern or Cash Pattten)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서플라이웨이트(Flyweight)각 객체에 모든 데이터를 유지하는 대신 여러 객체들 간에 상태의 공통 부분들을 공유하여 사용할 수 있는 RAM에 더 많은 객체들을 포함할 수 있도록 하는 구조 디자인 패턴이다.문제당신은 재미 삼아 플레이어들이 지도를 돌아다니며 서로에게 총을 쏘는 간단한 비디오 게임을 만들기로 가정해본다.당신은 폭발들로 인한 방대한 양의 총알들, 미사일들 및 파편들이 지도 전체를 날아다니는 전율 넘치는 경험을 플레이어들에게 선사하기로 했으며, 이를 선사하기 위해 사실적인 입자 시스템을 구현하기로 한다.당신은 게임을 완성한 후 친구에게 게임을 보내고, 내 컴퓨터에서는 게임이 완벽하게 실행되었지만, 당신의 친구는 오랫동안 게임을 즐길 수 없..