디자인 패턴 27

[디자인 패턴] 행동 패턴 (3) 해석자 Interpreter

해석자 (Interpreter) 패턴 1. 의도 어떤 언어로 표현된 문장을 해석하는 방법을 제공 2. 활용 어떤 언어로 표현된 문장을 해석하는 번역 문제를 해결하는 것이다. - 정규식 표현으로 문자열을 찾는 문제 정규식 문법으로 표현된 문장을 어떻게 해석하여 문자열을 찾도록 할 것인가 다음 정규식 문법을 생각해보자 expression: literal '|' alternation '|' sequence '|' repetition '|' 다른 expression을 포함한다. alternation: expression '|' expresssion, 두 표현 중 하나가 올 수 있다. sequence: expression '&' expression, 두 표현 모두가 와야한다. repetition: epxressi..

[디자인 패턴] 행동 패턴 (2) 명령 Command

명령 (Command) 1. 의도 요청 자체를 캡슐화하는 것. 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기/로깅/되돌릴 수 있는 연산을 지원. 2. 활용 명령 패턴은 요청 자체를 객체화하여 명시되지 않은 응용프로그램 객체의 요청을 처리할 수 있도록 지원. Command 추상 클래스는 연산에 필요한 인터페이스를 선언한다. Command 클래스의 가장 기본적인 연산은 Execute() 서브 클래스는 생성자에서 수신 객체(피연산의 대상)을 매개변수로 받고 수신 객체와 관련된 요청을 호출하도록 Execute()를 구현한다. - 메뉴 예시 Menu에서 각 선택 항목은 MenuItem 클래스의 인스턴스이다. Application은 메뉴와 메뉴를 구성하는 메뉴 항목(Menu Item)을 관리하고 열고 ..

[디자인 패턴] 행동 패턴 (1) 책임 연쇄 Chain of Responsiblity

책임 연쇄 (Chain of Responsibility) 1. 의도 메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴 요청에 대해 객체는 자신의 요청이면 처리하고 아닐시 다른 객체에게 요청을 전달한다. 2. 활용 그래픽 사용자 인터페이스(GUI)에 있는 문맥 감지 도움말 기능의 예 - 다이얼로그와 버튼 버튼은 클릭 가능한 인터페이스를 제공하고 다이얼로그는 버튼 인터페이스를 포함하고 사용자에게 메세지나 기능의 내용을 전달하는 인터페이스이다. Microsoft Visual Studio 프로그램 종료 시 하면 위 예시와 같은 다이얼로그를 표시한다. "저장", "저장안함", "취소" 버튼 인터페이스와 변경 내용을 띄우는 창 그리고 기본적인 텍스트가 포함된 다이얼로그라고 할 수 있..

[디자인 패턴] 생성 패턴 정리

예시 코드로 생성 패턴을 정리해보고 각 구현의 차이점을 알아보자. 추상 팩토리 Abstract Factory 만들고자하는 인스턴스에 대한 정보가 담기거나 타입이 결정된 공장 객체를 통해 인스턴스를 생성하는 방법. 주로 개별 객체를 만드는 것이 아니라 여러 객체가 합쳐진 시스템이나 환경을 만들기 위해 사용한다. 그러한 전체 시스템 객체의 생성자나 Create()와 같은 연산으로 참조자를 반환하는 방법으로 객체를 생성하고 매개변수로 추상 팩토리를 전달하면 원하는 시스템이 만들어진다. 팩토리 메서드 Factory Method 생성자가 아닌 함수 호출로 인스턴스를 생성하는 방법으로 클래스 타입을 동적으로 설정할 수 있다는 장점이 있다. 객체 생성시 가장 흔히 쓰이는 방법. 매개변수로 생성하는 클래스 타입을 알아..

[디자인 패턴] 구조 패턴 정리

※ 구조 패턴을 총 정리 종류 특징 적응자 Adapter - 서로 관련 없는 두 개의 인터페이스를 가져와 새로운 인터페이스로 통합하는 것 - 다른 클래스 인스턴스를 참조자로 관리하거나 다중 상속으로 구현. 가교 Bridge - 클래스 계통을 추상 표현과 구현부로 나누고 구현부 인스턴스를 통한 구현 기능을 제공. - 구현부 인스턴스를 참조자로 관리. 복합체 Composite - 객체의 전체와 부분을 포괄하여 표현할 수 있는 추상 클래스를 정의. - 소유 관계를 트리 형태로 나타내고 자식 연산에 대한 인터페이스를 제공. - Leaf 클래스는 자식을 포함하지 않는 독립적인 객체. 장식자 Decorator - 어떤 객체에 새로운 기능을 추가하고 싶을 때 덧대는 방법. - Decorator는 덧대고자 하는 대상 ..

[디자인 패턴] 구조 패턴 (7) 프록시 Proxy

프록시 (Proxy) 패턴 1. 의도 다른 객체에 대한 접근을 대신 수행하는 대리 객체를 둔다. 2. 활용 티스토리의 글과 같이 한 문서에는 글, 이미지, 링크 개체 등 여러 그래픽 요소가 포함되어 있을 수 있다. 문서를 화면에 띄우기 위해 모든 그래픽 요소를 그려야 하는데 모든 문서에 대한 필요 요소를 메모리에 올릴 필요는 없다. 오버레이와 같이 운영체제 기능도 있지만 사용자 코드로 필요한 객체만 메모리에 올릴 시간을 결정하도록 한다. 따라서 현재 보고 있는 문서 내용에 관련된 객체만 필요할 때 생성하는 방식으로 이미지와 같이 데이터 용량이 큰 객체에 적용한다. 프록시 패턴은 자신이 객체를 생성하지 않고 사용자로부터 접근이나 요청이 있을 때 생성된 객체를 사용하도록 한다. 이로 현재 보고 있는 문서에 ..

[디자인 패턴] 구조 패턴 (6) 플라이급 Flyweight

플라이급(Flyweight) 패턴 1. 의도 표현 상태가 적은 객체들을 공유함으로 효율적으로 시스템을 지원 2. 활용 응용프로그램이 대량의 객체를 사용할 때 객체 수가 많아져서 전체가 사용하는 메모리 용량이 클 때 객체를 구성하는 상태가 적을 떄 예시) 문서 편집기의 문자를 표현하는 방법 문서 편집기의 내용을 표시하기 위애 여러 그래픽 요소를 객체로 관리하며 이는 효과적인 표시를 가능하게 한다. 만약 문서 내용을 나타내는 문자 하나하나를 객체로 관리한다면, 굉장히 많은 객체를 문서마다 보유하고 이는 메모리 문제와 그래픽을 그리는 실행시간이 크게 지연될 것이다. 플라이급 객체는 공유 가능한 객체들을 의미하고 본질적(intrinsic) 상태와 부가적(extrinsic) 상태로 구분된다. 본질적 상태는 플라이..

[디자인 패턴] 구조 패턴 (5) 퍼사드 Facade

퍼사드 (Facade) 패턴 1. 의도 전체 서브시스템을 포괄하는 인터페이스를 정의. 2. 활용 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때 사용자와 서브시스템의 연관성을 줄이기 위해 서브 시스템을 계층화 시키고 퍼사드를 통해 서브 시스템을 접근 3. 참여자 퍼사드: 통합된 인터페이스를 제공, 서브시스템의 기능을 모두 알고 있으며 사용자의 요청을 서브시스템 객체에 전달한다. 서브시스템 클래스: 서브시스템의 기능을 구현하고 퍼사드 객체로 할당된 작업을 처리하지만 퍼사드를 접근할 수는 없다. 4. 협력방법 사용자는 퍼사드가 제공하는 인터페이스를 통해 서브 시스템의 기능을 이용한다. 5. 결과 1) 서브시스템 구성요소를 보호한다. 2) 서브시스템과 사용자 코드간의 결합도를 약하게 한다. 3) ..

[디자인 패턴] 구조 패턴 (4) 장식자 Decorator

장식자 (Decorator) 1. 의도 객체에 새로운 기능을 동적으로 추가하는 방법 2. 활용 기존에 있던 인터페이스에 기능을 추가하고 싶을 때 사용한다. 특정 클래스에 추가적인 기능을 포함하고 있는 서브 클래스를 만드는 것을 피한다. 예시로 GUI에 표시하는 시각적 객체들을 위한 VisualComponent 클래스가 있다하자. 그렇다면 VisualComponent 내부의 클래스 계통에 있는 모두에게 기능을 추가하는 것이 아니라 특정 서브 클래스에만 기능을 추가하는 것이다. VisualComponent 클래스를 상속하는 특정 서브 클래스를 TextView라고 하자. TextView 인터페이스에 스크롤바와 테두리 기능을 추가하고 싶을 때, TextView를 상속하는 새로운 서브 클래스를 만들어야할까? 당연..

[디자인 패턴] 구조 패턴 (3) 복합체 Composite

복합체 (Composite) 패턴 1. 의도 객체 구조가 트리 형태로 나타낼 수 있다. 객체의 부분은 또 다른 객체의 전체를 표현한다. 2. 활용 Grahpic 객체와 Picture 객체 Graphic 객체는 화면에 표시할 수 있는 모든 객체가 될 수 있다. 한 객체는 또 다른 Graphic 객체들을 포함하고 하나의 그룹처럼 행동할 수 있다. 예를 들면, MS PowerPoint의 도형 객체들을 그룹하하여 하나의 객체처럼 이동하거나 확대, 축소 연산이 가능하다. 이러한 그룹으로 묶어진 객체들을 컨테이너라고 하고 예시에서 Picture 클래스는 컨테이너로서 여러 그림 요소를 포함할 수 있다. 복합체 패턴에서 Graphic 클래스는 컨테이너와 개별 그림 요소의 의미를 모두 포함하도록 추상화하여 정의한다. 따..