6. 적응자 패턴(Adapter Pattern) 설계

6. 3 디자인

적응자 패턴에 대해 설명을 하기 위해 두 개의 예제 프로그램을 이용하겠습니다. 첫 번째는 적응자 패턴을 사용하기 전에 사용했던 프로그램이고 두 번째는 적응자 패턴을 사용한 예제 프로그램입니다.

적응자 패턴을 사용하기 전 프로그램은 카메라와 사람에 대한 영상 처리를 하는 모듈로 구성할 것입니다. 적응자 패턴을 사용하는 프로그램에서는 카메라와 사람에 대한 영상 처리를 하는 형식 외에 동물에 대한 영상 처리를 하는 형식을 추가할 것입니다.

 

6.3.1 첫 번째 프로그램(적응자 패턴을 적용하기 전에 사용하던 프로그램)

적응자 패턴 클래스 다이어그램
[그림] 적응자 패턴 클래스 다이어그램
 첫 번째 프로그램에서는 카메라와 사람에 대해 영상 처리를 하는 개체를 가진 프로그램을 예로 할게요. 사람에 대한 영상 처리를 하는 형식에서는 피사체를 설정하는 기능과 사람에 대한 영상 처리를 시작하기 위한 기능, 사람의 위치를 찾는 기능, 이미지처리하는 기능과 영상 처리된 사진을 얻어오는 기능을 노출할 것입니다. 

 

6.3.2 두 번째 프로그램 (적응자 패턴을 사용한 프로그램)

적응자 패턴 클래스 다이어그램
[그림] 적응자 패턴 클래스 다이어그램
 적응자 패턴을 적용한 프로그램에서는 동물에 대한 영상 처리를 하는 형식을 추가하려고 합니다. 해당 형식은 기존에 사용했던 사람에 대한 영상 처리를 하는 형식과 노출된 메서드 이름은 다르지만 비슷한 기능을 하는 메서드들끼리 대응시킬 수 있게 만들어져 있습니다. 이 경우에 기존에 사람에 대한 영상 처리 형식을 사용했던 방식과 같은 방식으로 사용할 수 있게 하려고 인터페이스를 정의합니다. 그리고 인터페이스 기반의 클래스에는  동물에 대한 영상 처리를 하는 개체를 포함합니다. 인터페이스에 약속된 기능을 구현해야 하는데 내부에 포함한 개체의 메서드를 호출하는 형태로 만들면 되겠죠. 이러한 방법으로 설계하면 Camera 개체에서는 같은 방법으로 사용할 수 있게 됩니다.

그리고 앞으로의 확장성을 높이기 위해 IImageProcessing 인터페이스를 정의합니다. 물론, PImageProcessor를 사용했던 기능들에 대한 약속을 포함해야겠지요.

동물에 대한 영상 처리하는 형식을 AImageProcessor 이름으로 정하였습니다. 그리고 이를 래핑하여 소유하고 있는 형식은 WrapImageProcessor이며 확장성을 위해 약속한 인터페이스 IImageProcessing을 기반으로 정의합니다. WrapAImageProcessor은 약속한 기능들을 구체적으로 구현해야 합니다. 실제 메서드 구현은 내부에 있는 adaptee 개체의 매핑된 메서드를 호출하는 구조로 만들어 제공하면 됩니다. 이렇게 하면 PImageProcessor 형식을 사용했던 사용자는 같은 방법으로 WrapAImageProcessor를 통해 AImageProcessor를 사용할 수 있습니다.