반응형

C# 267

[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) 가상 프락시 - 개요, 시나리오

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..

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

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 12. 3 디자인 프락시 패턴 중에 원격지 프락시를 설명하기 위한 예제 프로그램은 서버 측과 클라이언트 측이 필요합니다. 서버 측에서는 실제 개체인 Camera 개체 외에도 소켓 통신에서 클라이언트 연결을 기다리기 위한 ListenServer와 실제 소켓 통신을 수행하여 클라이언트 측 요청에 맞게 Camera를 제어하는 Stub으로 구성할 것입니다. 그리고 클라이언트 측에는 서버 측에 있는 Camera와 같은 방법으로 사용할 수 있게 RemoteController를 제공할 것입니다. Camera와 RemoteController는 ITake와 실현 관계를 갖게 할 것입니다. ITakce에서는 필요한 기능에 대해 약속하고 Camera와 Remo..

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

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 12.1 개요 프락시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴입니다. 프락시 패턴은 사용하는 목적과 방법에 따라 원격지 프락시와 가상 프락시, 보호용 프락시, 스마트 참조자로 구분할 수 있습니다. 원격지 프락시는 사용할 실제 개체가 클라이언트와 다른 위치에 있을 때 원격지에 있는 개체처럼 사용할 수 있는 프락시를 말합니다. 가상 프락시는 사용할 실제 개체의 특정 행위가 많은 시간이 들 때 비 동기적으로 수행할 수 있게하여 사용자가 작업이 완료되는 것을 기다리지 않게 해 주는 프락시입니다. 보호용 프락시는 개체의 기능을 권한에 따라 사용하는 수준을 다르게 해 주는 프락시입니다. 스마트 참조자는 여러 곳에서 사용하는 개체가 있다면..

[C#] 플라이급 패턴(Flyweight Pattern) - 구현

11. 플라이급 패턴(Flyweight Pattern) [그림] 플라이급 패턴(Flyweight Pattern) 클래스 다이어그램 11. 4 구현 플라이급 패턴의 예제 프로그램은 Meta, MetaPool, PictureFile, 데모 코드 순으로 구현합시다. 11.4.1 Meta Meta 형식에서는 카메라의 Body 종류에 대한 열거형 멤버와 렌즈 종류에 해당하는 열거형 멤버, 조명에 대한 열거형 멤버를 갖고 있게 합시다. 그리고 같은 멤버의 값을 가졌는지 비교하는 메서드와 이들 정보를 보여주는 메서드를 제공할 것입니다. ▶ Meta.cs using System.Collections.Generic; namespace Flyweight { class MetaPool // Meta 개체들을 관리하는 클래스..

[C#] 플라이급(Flyweight Pattern) - 설계(Design)

11. 플라이급 패턴(Flyweight Pattern) 11. 3 디자인 플라이급 패턴을 설명하기 위한 예제 프로그램은 사진 파일을 관리하는 프로그램으로 할게요. 사진 파일에는 촬영할 때의 Body, 렌즈, 조명에 대한 정보를 갖고 있게 할 것입니다. 이처럼 사진의 촬영 정보들은 Meta 형식으로 정의하고 MetaPool에서 관리합니다. 새로운 조건에서 찍은 사진은 MetaPool 개체에게 촬영 조건에 해당하는 Meta개체를 요청하여 참조합니다. MetaPool은 관리하는 Meta 개체 중에 같은 조건인 개체가 있는지를 확인합니다. 만약, 있다면 해당 개체를 반환하고 없을 때만 Meta 개체를 생성하여 반환합니다. 물론, 생성한 Meat 개체는 내부 컬렉션에 보관합니다. 즉, 각 사진마다 별도의 Meta..

[C#] 플라이급 패턴(Flyweight Pattern) - 개요, 시나리오

11. 플라이급 패턴(Flyweight Pattern) 11.1 개요 프로그램에서 개체가 많아지면 메모리가 많이 차지하게 됩니다. 이럴 때 메모리 효율을 높일 필요성이 있다면 무엇을 해야 할까요? 플라이급 패턴은 이러한 문제를 해결하기 위한 하나의 방법입니다. 플라이급 패턴은 개체의 멤버 필드 중에 각 개체가 반드시 갖고 있어야 할 멤버와 여러 개체가 공유해서 사용할 수 있는 멤버로 분리하는 작업에서부터 출발합니다. 공유해서 사용할 수 있는 멤버가 가질 수 있는 상태의 종류가 개체의 수보다 상대적으로 적다면 플라이급 패턴을 사용하여 메모리 효율을 높일 수 있습니다. 플라이급 패턴에서는 공유해서 사용할 수 있는 상태들을 공유 풀에 형성합니다. 그리고 각 개체는 특정 상태를 참조합니다. 만약, 개체의 수가 ..

[C#] 퍼사드 패턴(Facade Pattern) - 구현

10. 퍼사드 패턴(Facade Pattern) [그림] 퍼사드 패턴(Facade Pattern) 클래스 다이어그램 10. 4 구현 예제 프로그램은 Picture, Compensator, PictureManager, SmartManager, 데모 코드 순으로 설명하겠습니다. 10.4.1 Picture Picture 형식에서는 멤버 필드로 색조, 명도, 채도가 있고 멤버 속성으로 이름을 제공하겠습니다. 그리고 사진을 수정하는 메서드, 이름이 같은지를 비교하는 메서드, 정보를 보여주는 메서드를 제공할게요. ▶ Picture.cs namespace Facade { class Compensator //하위 계층 서비스 { public void Change(Picture picture, int tone, int ..

반응형