반응형

전체 글 2934

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

[C#] 퍼사드 패턴(Facade Pattern) - 설계(Design)

10. 퍼사드 패턴(Facade Pattern) 10. 3 디자인 퍼사드 패턴을 설명하기 위한 예제 프로그램은 사진을 바로잡는 모듈과 사진을 관리하는 모듈을 통합한 모듈을 만드는 것으로 하겠습니다. 예제 프로그램에는 보정 대상인 사진과 보정기, 사진 관리자와 통합 모듈인 스마트 관리자로 구성할게요. 통합 모듈인 SmartManager를 제공하지 않으면 사용자는 사진 관리자인 PictureManger와 보정기인 Compensator를 사용해야 할 것입니다. 통합 모듈인 SmartManager를 제공해서 사용자는 내부에 사진 관리자와 보정기를 모르더라도 사진을 관리할 수 있고 원하는 사진을 찾아 바로잡을 수 있게 됩니다. [그림] 퍼사드 패턴 설계 예제 클래스 다이어그램 2016/04/26 - [프로그래밍 ..

[C#] 퍼사드 패턴(Facade Pattern) - 개요, 시나리오

10. 퍼사드 패턴(Facade Pattern) 10.1 개요 프로그래밍하다 보면 여러 종류의 라이브러리를 사용해야 하는 경우가 발생합니다. 그리고 실제 각 라이브러리에 있는 모든 기능을 사용할 필요가 없는 경우가 많지요. 이럴 때 상위 수준의 라이브러리를 만들어서 사용하기 쉽게 제공할 수 있습니다. 이처럼 상위 수준에서 인터페이스를 정의하여 하위 수준의 서브 시스템의 기능을 사용할 수 있게 하고자 할 때 퍼사드 패턴을 사용하면 효과적입니다. 퍼사드 패턴에서는 하위 수준의 여러 서브 시스템에서 제공되는 기능들을 상위 수준에서 단순화시켜 사용하기 쉽게 해 줍니다. 또한, 이를 통해 여러 서브 시스템과의 복잡한 관계를 느슨하게 만들어 주어 하위 시스템과 독립성을 갖게 해 줍니다. 10. 2 시나리오 오전 강..

[C#] 장식자 패턴(Decorator Pattern) - 구현

9. 장식자 패턴(Decorator Pattern) [그림] 장식자 패턴(Decorator Pattern) 클래스 다이어그램 9. 4 구현 장식자 패턴의 예제 프로그램은 Picture, IChange, 보정기, 데모 순으로 구현할게요. 9.4.1 Picture Picture 클래스는 장식자 패턴에 포함되는 형식은 아닙니다. 단순히 예제 프로그램을 위해 정의한 형식으로 멤버 필드로 색조, 명도, 채도 값을 갖고 있고 이들 값을 변경하는 메서드와 보여주는 메서드를 갖도록 구현합시다. ▶ Picture.cs namespace Decorator { interface IChange { void Change(Picture picture,int tone,int brightness,int saturation); } }..

[C#] 장식자 패턴(Decorator Pattern) - 설계(Design)

9. 장식자 패턴(Decorator Pattern) 9. 3 디자인 장식자 패턴을 설명하기 위한 예제 프로그램은 사진을 바로잡는 데모로 하겠습니다. 예제 프로그램에는 보정 대상인 사진과 보정기, 색조 보정기, 명도 보정기, 채도 보정기, 다중 보정기로 구성됩니다. 보정기의 사진을 수정하는 기능을 약속한 IChange 인터페이스를 약속합시다. 그리고 보정기는 IChange를 기반으로 ToneCompensator(색조 보정기), BrightnessCompensator(명도 보정기), SaturationCompensator(채도 보정기), MultiCompensator(다중 보정기)를 만들게요. 색조 보정기와 명도 보정기, 채도 보정기는 단위 기능을 수행하는 개체입니다. 그리고 다중 보정기는 IChange 인..

반응형