반응형

클래스 다이어그램 33

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

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

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

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

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

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

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

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

[C#] 복합체 패턴(Composite Pattern) - 설계(Design)

8. 복합체 패턴(Composite Pattern) 8. 3 디자인 복합체 패턴에 대한 설명을 위해 트리와 경로, 카테고리 형식을 예로 들겠습니다. 경로는 단일 개체이며 카테고리는 복합 개체입니다. 카테고리에는 경로 개체와 카테고리 개체를 자식 요소로 포함할 수 있습니다. 복합체 패턴을 이용하면 경로(단일 개체)나 카테고리(복합 개체)를 같은 방법으로 사용할 수 있게 됩니다. 이를 위해 경로와 카테고리를 일반화하여 기반 형식으로 트리를 만들 것입니다. 같은 방식으로 사용할 수 있게 하려고 경로 개체에서 할 수 있는 기능과 카테고리 개체로 할 수 있는 모든 기능을 트리에서 제공할 것입니다. 그리고 경로와 카테고리에서는 자신들이 제공해야 할 기능에 대해 재정의를 해 줍니다. 그리고 카테고리 개체는 복합 개체..

[C#} 가교 패턴(Bridge Pattern) - 설계(Design)

7. 가교 패턴(Bridge Pattern) 7. 3 디자인 가교 패턴에 대해 설명하기 위한 예제 프로그램은 카메라와 렌즈, 모듈로 구성할게요. 그리고 렌즈는 AF 렌즈와 MF 렌즈, 모듈은 VR 모듈과 PC 모듈을 정의할게요. 카메라는 내부에 렌즈를 가지고 있는 클래스로 가교 패턴과는 연관성이 없습니다. 가교 패턴에서의 추상화 부분은 렌즈, AF 렌즈, MF 렌즈입니다. 그리고 구체적 구현 부분은 모듈과 VR 모듈, PC 모듈이 있습니다. 가교 패턴을 적용하지 않으면 기반 클래스 렌즈에서 파생한 AF 렌즈, MF 렌즈가 있고 AF 렌즈에서 파생한 AF VR 렌즈, AF PC렌즈, AF VR PC렌즈가 있게 됩니다. 물론, MF 렌즈에서 파생된 MF VR 렌즈와 MF PC렌즈, MF VR PC렌즈가 존재..

[C#] 적응자 패턴(Adapter Pattern) - 설계(Design)

6. 적응자 패턴(Adapter Pattern) 6. 3 디자인 적응자 패턴에 대해 설명을 하기 위해 두 개의 예제 프로그램을 이용하겠습니다. 첫 번째는 적응자 패턴을 사용하기 전에 사용했던 프로그램이고 두 번째는 적응자 패턴을 사용한 예제 프로그램입니다. 적응자 패턴을 사용하기 전 프로그램은 카메라와 사람에 대한 영상 처리를 하는 모듈로 구성할 것입니다. 적응자 패턴을 사용하는 프로그램에서는 카메라와 사람에 대한 영상 처리를 하는 형식 외에 동물에 대한 영상 처리를 하는 형식을 추가할 것입니다. 6.3.1 첫 번째 프로그램(적응자 패턴을 적용하기 전에 사용하던 프로그램) [그림 6] 적응자 패턴 사용하기 전 프로그램의 클래스 다이어그램 첫 번째 프로그램에서는 카메라와 사람에 대해 영상 처리를 하는 개체..

[C#] 단일체 패턴(Singleton Pattern) - 설계(Design)

5. 단일체 패턴(Singleton Pattern) 5. 3 디자인 단일체 패턴을 설명하기 위한 예제 프로그램에 대해 얘기할게요. 여기에서는 카메라(단일체), 디스플레이 장치, 메모리 장치와 내부 개체(단일체)로 구성하려고 합니다. 카메라 개체를 통해 사진을 찍으면 단일체인 내부 개체를 통해 메모리 장치에 저장할 수 있게 할게요. 카메라는 디스플레이 장치에게 메모리 장치에 대한 정보 보기 모드와 사진 보기 모드를 지원합시다. 내부 개체에서는 찍힌 사진들을 메모리 장치에 보관하고 이들에 대한 정보들을 관리하는 역할을 할 것입니다. 그리고 카메라와 디스플레이 장치들은 내부 장치를 통해 메모리 카드에 사진을 보관하거나 보관된 사진 및 메모리 장치에 대한 정보를 얻어올 수 있습니다. 카메라는 예제 프로그램의 단..

[C#]4. 원형 패턴(Prototype Pattern) - 설계(Design)

4. 원형 패턴(Prototype Pattern) 4. 3 디자인 여기에서는 줌 렌즈와 줌 렌즈 생산 설비 형식으로 구성된 예를 보여드릴게요. 줌 렌즈에는 자신을 복제할 수 있는 메소드를 제공하고 있어야겠지요. 클래스 이름은 ZoomLens라 정합시다. 줌 렌즈 생산 설비는 모형 줌 렌즈를 하나 갖게 할 것입니다. 그리고 제품 생산요청이 들어오면 모형을 복제한 줌 렌즈를 반환합니다. 줌 렌즈 생산 설비에 대한 클래스 이름은 ProLine이라 하겠습니다. [그림 4] 원형 패턴 설계 예제 클래스 다이어그램 2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 4. 원형 패턴(Prototype Pattern) - 개요, 시나리오 2016/04/25 - [프로그래밍 기..

[C#] 2. 빌더 패턴(Builder Pattern) - 설계

2. 빌더 패턴(Builder Pattern) 2. 3 디자인 이번에는 카메라와 사진, 사진 빌더로 빌더 패턴에 대한 예를 들려고 합니다. 카메라는 사진을 찍는 기능이 있고 효과를 줄 수 있게 하려고 합니다. 대신 효과를 주는 부분을 사진 빌더를 통해 수행하게 할 것입니다. 카메라는 디렉터 역할을 하며 Camera 이름의 클래스로 구현하겠습니다. 사진은 카메라를 통해 사용자가 얻고자 하는 개체로 Picture라고 정하겠습니다. 사진 빌더는 빛을 모아서 피사체를 상으로 맺히는 기능과 이미지를 수정하는 기능이 있게 합시다. 그리고 이러한 기능을 약속한 추상 클래스 PictureBuilder를 정의할게요. 빌더의 종류에는 낮에 사용하는 SmoothBuilder와 밤에 사용하는 REPreventBuilder를 ..

반응형