디자인 패턴 6

[디자인 패턴] 행동 패턴 (5) 감시자 Observer

감시자 (Observer) 패턴 1. 의도 객체 사이에 一 대 多의 의존 관계를 정의하여 어떤 객체의 상태가 변할 때 그 객체를 관찰하는 감시자에게 변화를 통보하고 변화된 상태를 알 수 있게 한다. 2. 활용 감시자 패턴은 서로 의존적인 두 클래스가 일관성을 갖도록 하는 것이다. 일관성을 가지면서 두 클래스의 결합도를 높이지 않아 각 클래스의 재사용성을 높이는데 목적이 있다. - Subject-Observer 예시 의존적인 관계를 가지는 두 클래스르 Subject-Observer라고 할 수 있고 이를 설명하기 위해 데이터와 그래프 자료를 예로 들 수 있다. 데이터 자료형을 스프레드 시트나 그래프로 나타내는 GUI 객체들이 있는데 이들은 모두 실제 데이터에 의존적인 모습을 보인다. 데이터가 변경되면 그에 ..

[디자인 패턴] 행동 패턴 (4) 상태 State

상태 (State) 패턴 1. 의도 객체 상태에 따라 행동이 다르고 행동은 다른 상태 전이를 발생시킬때 사용하는 패턴. 2. 활용 - TCP 연결 네트워크 연결을 추상화한 TCPConnection 클래스를 생각해보면 TCPConnection 클래스는 여러가지 상태를 가질 수 있다. 연결 성공(Established), 대기(Listening), 연결 종료(Closed) 상태를 가지는데 TCP-Connection 객체는 자신의 상태에 따라 사용자 요청에 대한 처리 결과가 다르다. ex) Open 요청은 종료 상태에서만 의미가 있을 수 있고 Acknowledge() 요청은 전송된 패킷을 성공적으로 수신했다는 패킷을 보내는 것이므로 대기나 연결 성공 상태에서 의미가 있는 연산이다. - TCPState 추상 클래..

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

※ 구조 패턴을 총 정리 종류 특징 적응자 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) ..