반응형

전체 글 2934

[C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 설계(Design)

15. 책임 연쇄 패턴(Chain of Responsibility Pattern) 15. 3 디자인 책임 연쇄 패턴에 대한 설명을 위한 예제 프로그램은 사진 보정에 관한 소재를 대상으로 하겠습니다. 사용자와 상호작용을 하는 UIPart는 클라이언트 역할을 하며 사진을 보정하는 개체에게 보정 명령을 요청하는 주체입니다. 사진을 보정하는 개체들은 UIPart에서 전달된 명령을 처리하거나 연결된 다른 사진 보정 개체에게 전달하게 할 것입니다. 이를 위해 추상 클래스로 ChangeHandler를 정의하였고 보정 명령을 받아 수행할 수 있는 ChangeRequest 메서드에 대한 약속을 멤버로 정의하였습니다. 그리고, 다른 사진 보정 개체에게 전달된 명령을 전달할 수 있게 하였습니다. 예제 프로그램에서는 사진 보..

[C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 개요, 시나리오

15. 책임 연쇄 패턴(Chain of Responsibility Pattern) 15.1 개요 여러 형식 개체들로 구성된 프로그램을 작성하다 보면 메시지를 보내는 곳에서 이를 받아 처리해야 할 개체의 위치를 파악하기가 어려운 경우가 발생합니다. 만약, 메시지를 받아 처리해야 할 개체들을 관리하는 집합체가 있거나 계층화되어 있다면 책임 연쇄 패턴을 통해 효과적으로 메시지를 전달할 수 있습니다. 책임 연쇄 패턴에서는 메시지 송신자는 이를 받아 처리해야 할 개체가 속한 집합체에 메시지를 전달하면 집합체 내에서 수신해야 할 개체에게 메시지를 전달하여 처리를 하게 하는 것입니다. 특정 개체에게 메시지가 전달되면 해당 메시지를 자신이 처리를 할 것인지를 판단을 하게 됩니다. 만약, 자신이 처리를 해야 한다면 이에..

[C#] 행동 패턴 (책임 연쇄 패턴, 명령 패턴, 해석자 패턴, 중재자 패턴, 메멘토 패턴, 감시자 패턴, 상태 패턴, 전략 패턴, 템플릿 메서드 패턴, 방문자 패턴)

3부 행동 패턴들 15. 책임 연쇄 패턴(Chain of Responsibility Pattern)송신부에서는 수신부에 전달하면 수신부에서 메시지를 전달받은 개체는 자신과 연관되는 다른 개체들에게 이 메시지를 전달을 하는 형태로 실제 처리할 개체까지 전달합니다. 실제 윈도우즈 프로그램에서 메시지를 처리하는 내부 원리도 이와 흡사합니다. 2016/04/27 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 개요, 시나리오 16. 명령 패턴 (Command Pattern) 명령을 요청하는 곳에서 수행할 알고리즘을 입력 인자로 정의하여 명령을 수행하는 곳에서는 입력 인자로 전달받은 알고리즘을 이용을 하게 합..

[C#] 프락시 패턴(Proxy Pattern) 보호용 프락시 - 구현

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 [그림] 프락시 패턴(Proxy Pattern) - 보호용 프락시 클래스 다이어그램 14. 4 구현 프락시 패턴 중에 보호용 프락시에 대한 예제 프로그램을 구현하는 순서는 IView와 Picture, 보호용 프락시인 ProctectionPicture, PictureManager와 데모 코드 순으로 하겠습니다. 14.4.1 IView와Picture IView에서는 정보를 보여주는 메서드와 소유자를 얻어오는 속성에 대한 약속을 할께요. 이를 구현 약속하는Picture와 ProtectionPicture에서는 약속된 기능을 구현해야 하겠죠. Picture의 생성자 메서드에서는 사진 이름과 소유자 정보를 입력 인자로 받도록 할께요. 그리고, View..

[C#] 프락시 패턴(Proxy Pattern) 보호용 프락시 - 설계(Design)

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 14. 3 디자인 프락시 패턴 중에 보호용 프락시를 설명하기 위한 예제 프로그램은 사진 관리 프로그램입니다. 프로그램 내부에는 사진과 보호용 프락시인 보호용 사진이 있고 이들을 일반화 시킨 IView가 있습니다. 그리고, 이들을 사용하는 사진 관리자를 만들 것입니다. 사진과 보호용 사진은 IView 인터페이스를 구현 약속한 클래스이므로 IView 인터페이스 형식 변수를 통해 일관되게 사용할 수 있습니다. 대신 보호용 사진의 경우 사용자를 설정하거나 사용 가능한 사용자를 추가하는 메서드를 제공하여 권한이 있는 사용자만 해당 사진에 접근할 수 있게 할 것입니다. 사진 관리자는 IView 인터페이스 형식 개체를 관리할 수 있으며 사용자에 의해 일..

[C#] 프락시 패턴(Proxy Pattern) 보호용 프락시 - 개요, 시나리오

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 14.1 개요 이번에는 프락시 패턴 중에서 보호 프락시에 대해 살펴보기로 합시다. 보호 프락시는 사용자가 실제 개체의 특정 행위를 수행할 수 있는 권한이 있는지를 확인할 필요가 있을 경우에 사용이 됩니다. 14. 2 시나리오 저녁에 가족들과 같이 TV 시청을 하면서 사생활 보호에 대한 얘기를 나누게 되었어요. 얘기를 하다 보니 어디까지 공유해야 하고 보호해야 하는지에 대한 생각이 서로 많이 다르더군요. 얘기를 나누면서 우리 가족은 서로에 대한 신뢰를 바탕으로 자신이 생각이 제일 중요하다는 결론에 도달했습니다. 그리고, 저는 방으로 들어가 새로운 형태의 사진 관리 응용을 만들어 보았습니다. 기존의 응용에서는 단순히 메모리 카드에 있는 사진을 ..

[C#] 프락시 패턴(Proxy Pattern) 가상 프락시 - 구현

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 [그림] 프락시 패턴(Proxy Pattern) - 가상 프락시 클래스 다이어그램 13. 4 구현 프락시 패턴 중에 가상 프락시에 대한 예제 프로그램을 구현하는 순서는 IConvert와 ImageConverter를 구현한 후에 가상 프락시인 VirtualConverter 순으로 하겠습니다. 13.4.1 IConvert와 ImageConverter IConvert에서는 이미지를 설정하고 얻어오는 멤버 속성 Image와 이미지를 리셋하는 ClearImage, 변환하는 ConvertImage 메서드를 약속합니다. 그리고, ImageConverter에서는 이들에 대한 구현하면 되겠죠. 다만, 가상 프락시에 대한 설명을 위해 ConvertImage 메..

[C#] 프락시 패턴(Proxy Pattern) 가상 프락시 - 설계(Design)

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 13. 3 디자인 프락시 패턴 중에 가상 프락시를 설명하기 위한 예제 프로그램은 이미지 변환 프로그램입니다. 프로그램 내부에는 이미지를 설정하고 리셋시키고 변환, 이미지 얻어오기 기능에 대한 약속을 하는 IConvert 와 실제 이미지를 변환하는 ImageConverter, 가상 프락시 개체를 표현한 VirtualConverter가 있습니다. 실제 이미지를 변환하는 ImageConverter 개체의 ConvertImage 메서드를 수행을 명령하면 장시간 동안 변환 작업을 수행을 하기 때문에 사용이 불편할 수 있습니다. 이러한 불편을 해소하기 위해 가상 프락시 개체인 VirtualConverter를 제공하고 있습니다. 가상 프락시 개체인 Vir..

[C#] 프락시 패턴(Proxy Pattern) 가상 프락시 - 개요, 시나리오

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 13.1 개요 이번에는 프락시 패턴 중에서 가상 프락시에 대해 살펴보기로 합시다. 가상 프락시는 실제 개체의 특정 행위를 수행하는 비용이 클 경우 사용이 됩니다. 사용자가 가상 프락시 개체를 통해 비용이 많이 드는 작업을 요청을 했을 시에 가상 프락시 개체는 이 작업을 별도의 쓰레드에서 수행하게 명령만 내립니다. 이를 통해 사용자는 비용이 큰 작업을 수행 요청했을 시에 수행이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있게 됩니다. 13. 2 시나리오 여수 엑스포를 다녀와서 사진 보정 작업을 수행하였습니다. 그리고, 이번에는 사진들을 소셜 사이트에 올려볼까 하는데 사진들의 사이즈가 너무 커서 모두 줄이고 올려야 했습니다. 사진 사이즈..

[C#] 프락시 패턴(Proxy Pattern) 원격지 프락시 - 구현

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 [그림] 프락시 패턴(Proxy Pattern) 원격지 프락시 클래스 다이어그램 12. 4 구현 프락시 패턴 중에 원격지 프락시에 대한 예제 프로그램을 구현하는 순서는 서버 측을 구현한 후에 클라이언트 측을 구현할게요. 서버 측은 ITake, ICamera, ListenServer와 Stub 순으로 구현해 봅시다. 12.4.1 ITake와 Camera ITake에서는 단순히 TakeAPicture, ChangeMode, GetMode 메서드를 약속합시다. ▶ ITake.cs using System; namespace RemoteProxy { class Camera:ITake { bool mode = false; //true: 수동 모드, f..

반응형