[디자인 패턴] 어댑터 패턴

[원본 링크]

현재 21세기를 살아가고 있는 문명인이라면, 어댑터(Adaptor)란 말을 자주 들어봤을 것이다.
혹시 모른다면

이런 것들을 어댑터라 한다. 중간에서 서로 다른 장치들을 이어주는 것들.

마찬가지로 원형인 adopt는 맞춰준다는 뜻을 가진다.

어댑터 패턴 또한 이와 같다.
이름 그대로, 서로 다른 타입을 연결해주는 어댑터 클래스를 사용하는 것이다.

일단 코드를 보자.
사람의 정보를 나타내는 IPerson이라는 인터페이스가 있다.
이건 자기소개를 해주는 공통 메서드를 가진다.

그리고 이 인터페이스로 한국인과 영국인이 구현되어있다.
원한다면 더 만들어도 되고...
각각의 클래스는 자신의 언어로 자기소개를 하게 되어있다.

그럼 대충 이런식으로 사용할 수 있을 것이다.

이대로면 아무 문제가 없다.
그런데, IPerson과 관계가 없는 별개의 클래스 값을 저 정적메서드 introduce에 전달해야 한다면 어떨까?

아래는 개의 인터페이스 IDog와 그 구현 클래스 푸들이다.

저 Poodle 등의 IDog 구현 클래스 값을 정적메서드 introduce에 전달해야 한다는 것이다.

관련도 없던 저 클래스들에 갑자기 IPerson을 인터페이스를 구현하도록 해야 할까?
그러면 대량의 수정이 필요할 수도 있다... 이는 심각한 낭비다.
패턴을 익히는 우리는 최대한 적은 코드로 최대의 확장을 꾀할 수 있어야 한다.

이럴때 좋은 방법은 그냥 중간자 역할을 하는 어댑터 클래스를 바로 만들어버리는 것이다.

어댑터 클래스는 삽입의 목적지가 될 인터페이스를 구현하며,
삽입의 대상이 될 인터페이스의 값을 받는다.
그럼 대충 이런 식으로 구현할 수 있다.
껍데기만 씌우는 것이다. 사람처럼 보이게끔.

그럼 대충 이런식으로 사용할 수 있다.

잘 돈다.

임시방편스런 패턴이긴 하지만, 오히려 나름 분리도 잘 되고 깔끔한 구조를 가지는 편이다.


참조
[헤드퍼스트 디자인 패턴]