반응형

전체 글 2934

[C#] 장식자 패턴(Decorator Pattern) - 개요, 시나리오

9. 장식자 패턴(Decorator Pattern) 9.1 개요 프로그래밍하다 보면 너무 다양한 형태로 기능을 확장해야 할 경우가 발생합니다. 예를 들면 여러 종류의 단위 기능이 있고 이들을 조합해서 사용할 경우입니다. 사진에 원 장식을 하고 여기에 사각형 장식을 하고 여기에 삼각형 장식을 하는 등의 작업을 반복할 수 있는 경우처럼 말이죠. 이 같은 경우에 단위 기능들에 대한 조합된 기능을 수행할 수 있는 개체 형식들을 정의하기 위해서는 무수히 많은 수의 파생 클래스를 정의해야 합니다. 이때 장식자 패턴을 사용하면 장식자 개체에서 필요한 단위 기능을 하는 형식 개체를 포함을 시키는 것으로 이를 해결할 수 있습니다. 이 같은 경우에 장식자 패턴은 단위 기능을 수행하는 형식과 장식자 형식을 정의하고 일반화하..

[C#] 복합체 패턴(Composite Pattern) - 구현

8. 복합체 패턴(Composite Pattern) [그림] 복합체 패턴(Composite Pattern) 클래스 다이어그램 8. 4 구현 복합체 패턴의 예제 프로그램을 구현하는 순서는 Tree, Category, Path, 데모 코드 순으로 하겠습니다. 8.4.1 Tree Tree 클래스는 Path와 Category를 같은 방법으로 사용할 수 있게 하려고 Path에서 수행할 수 있는 기능과 Category에서 할 수 있는 모든 기능에 대해 약속 또는 구현해 주어야 합니다. Path에서는 자신의 정보를 보여주는 기능이 필요합니다. Category에서는 자신의 정보 및 자식 요소들에 대한 정보를 보여주는 기능이 필요합니다. 이에 대한 구체적 구현이 추상 메서드로 약속만 하겠습니다. 또한, Category에..

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

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

[C#] 복합체 패턴(Composite Pattern) - 개요, 시나리오

8. 복합체 패턴(Composite Pattern) 8.1 개요 복합체 패턴은 복합 개체와 단일 개체를 같은 방법으로 사용하고자 할 때 사용되는 패턴입니다. 복합체 패턴은 트리 구조로 관리고자 할 때 자주 사용이 됩니다. 예로 폴더(복합 개체)와 파일(단일 개체)을 같은 방법으로 사용하게 하는 것이죠. 이처럼 복합체 패턴에서는 단일 개체와 복합 개체를 같은 방법으로 사용할 수 있게 일반화하여 기반 클래스를 제공합니다. 단일 개체 형식과 복합 개체 형식은 파생된 클래스로 구현하겠죠. 중요한 것은 기반 클래스에서 단일 개체와 복합 개체에서 할 수 있는 모든 기능을 인터페이스로 약속한다는 점에 있습니다. 이를 통해 사용자는 해당 개체가 단일 개체인지 복합 개체인지를 모르더라도 같은 방법으로 사용할 수 있는 것..

[C#] 가교 패턴(Bridge Pattern) - 구현

7. 가교 패턴(Bridge Pattern) [그림] 가교 패턴(Bridge Pattern) 클래스 다이어그램 7. 4 구현 가교 패턴에 대한 예제 프로그램은 Module 파트, Lens 파트, Camera순으로 구현하는 과정을 설명하겠습니다. 7.4.1 Module 파트 Module 파트는 구체적 기능을 구현하는 역할을 담당합니다. 여기에서는 피사체를 목적에 맞게 영상 처리하는 기능을 구현하겠습니다. IImageProcessing은 영상 처리 기능을 약속한 인터페이스입니다. 영상 처리하는 기능은 string 형식의 피사체를 입력 인자로 전달 받아 영상 처리된 결과를 string 형식으로 반환하는 ImageProcessing 메서드입니다. ▶ IImageProcessing.cs namespace Brid..

[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#] 가교 패턴(Bridge Pattern) - 개요, 시나리오

7. 가교 패턴(Bridge Pattern) 7.1 개요 가교 패턴은 추상적 개념과 구체적 구현 사이의 종속성을 제거하여 목적에 맞게 다양한 구현 방법을 사용하도록 제공하는 패턴입니다. 프로그램하다 보면 일반화 관계로 설계하였을 때 기반 클래스에서 파생하는 클래스가 너무 많아지는 경우가 발생합니다. 그리고 다시 파생 클래스를 기반으로 하는 파생 클래스가 많아지는 경우도 발생하지요. 예를 들어, 사람이라는 기반 클래스가 있다고 가정합시다. 그리고 사람에서 파생한 학생과 학부모, 강사 등이 있습니다. 학생 중에는 피아노를 칠 수 있는 학생과 야구를 할 줄 아는 학생, 피아노와 야구를 할 줄 하는 학생 등이 있을 수 있겠죠. 학부모와 강사도 마찬가지일 것입니다. 이를 일반화 관계로 표현하다 보면 파생되는 계층..

[C#] 적응자 패턴(Adapter Pattern) - 구현

6. 적응자 패턴(Adapter Pattern) 6. 4 구현 6.4.1 첫 번째 프로그램(적응자 패턴을 적용하기 전에 사용하던 프로그램) [그림] 적응자 패턴 적용 전 클래스 다이어그램 첫 번째 프로그램은 적응자 패턴을 사용하기 전에 사용`했던 프로그램을 작성하는 것입니다. 카메라와 사람에 대한 영상 처리를 하는 형식으로 구성된 프로그램을 만들기로 약속했었죠. 먼저, 사람에 대한 영상 처리를 하는 형식에는 피사체를 설정하는 기능과 영상 처리를 시작하는 기능, 사진을 얻어오는 기능을 제공하기로 하였습니다. ▶PImageProcessor.cs namespace BeforeAdapter { class Camera { PImageProcessor pi_processor; public Camera(PImageP..

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

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

[C#] 적응자 패턴(Adapter Pattern) - 개요, 시나리오

6. 적응자 패턴(Adapter Pattern) 6.1 개요 적응자 패턴은 서로 비슷한 기능을 하지만 사용 방법이 다른 경우 같은 인터페이스를 갖게 변환시키는 패턴입니다. 변환시키기 전에는 서로 다른 방법으로 사용해야 했던 작업들을 일관된 인터페이스를 사용할 수 있어 사용이 쉬워집니다. 적응자 패턴은 사용자에게 익숙한 인터페이스 형태로 포장하여 제공한다는 의미에서 래퍼(Wrapper)라고도 부릅니다. 6. 2 시나리오 어느 날 강의를 하고 있는데 이 매핑 씨에게 전화가 왔습니다. "안녕하세요. 혁재 아버지!" "네, 잘 지내시죠. 그런데 어떤 일로 저에게…" "저희가 이번에 새로운 모듈을 개발했거든요. 그런데 개발하는 과정에서 기존 모듈과 사용 방법이 다르게 만들게 되었어요. 개발을 완료해서 보니 모듈이..

반응형