Adapter 이야기 ~

이번 글에서는 Adapter(어뎁터) 이야기를 하도록 합시다.

흔히 우리가 알고 있는 어뎁터는 220볼트의 전압을 가전기기에 맞도록 전압을 바꿔 주는 걸로 알고 있죠.
(가정집 마다 꼭 있는 휴대전화 충전기를 생각하세요 ~)

이런 말을 하는 이유는 가전기기 어뎁터와 자바에서 말하는 어뎁터가 비슷한 역할이기 때문입니다.

그럼 자바에서 말하는 어뎁터는 무엇일까요?

이미 짜여진 것을 그대로 이용하기 어려울 때 이용하기 편리하게 바꿔서 이용하는 것을 말합니다.

그리고 어뎁터라는 것은 패턴이라고 말할 수 있습니다.

기존에 것을 사용하기 편리하게 변환해서 이용한다.
200볼트를 12볼트로 변환해서 사용한다.

같죠?

그럼 API에서 어뎁터 패턴이 이용된 것을 한번 찾아 봅시다.

java.awt.event 패키지에 보면 WindowListener 인터페이스가 존재합니다. 사용을 하려면 인터페이스므로 모든 추상메소드를 구현을 해야 한다는 것이 단점으로 지적 됩니다. 추상메소드가 7개나 존재하니까요.

실제로 이 추상메소드를 모두 이용한다면 문제가 전혀 없겠죠. 그러나 하나의 이벤트만 이용할 것이라면 비효율적으로 불편합니다. 이런 단점을 해결하고자 어뎁터가 존재하는 것입니다.

이를 확인하기 위해 같은 패키지 내에 WindowListener 인터페이스를 구현하는 WindowAdapter 클래스를 찾아봅시다.

WindowAdapter  클래스를 확인해보면 WindowListener 인터페이스를 구현하기 때문에 모든 추상메소드가 구현이 돼 있습니다. 물론 내용이 존재해도 되겠지만 이는 사용하기 편리하도록 하는 것이기 때문에 내용은 빈 깡통인 메소드만이 존재하지요.

그럼 하나의 윈도우 이벤트를 사용하게 된다면 WindowListener 인터페이스를 구현하는 쪽 보다 WindowAdapter 를 상속을 받거나 내부 무명 클래스로 이용을 하게 될 때는 모든 메소드를 구현할 필요성이 없어집니다. 이 것이 가장 기본적인 어뎁터 패턴이지요.

그럼 다른 이벤트는 어떠 할까요? 인터페이스의 메소드가 2개 이상 존재하는 인터페이스는 당연히 각각의 어뎁터를 보유 하지 않을까요?

확인 해 보시길 바랍니다. 많이 존재합니다. 만약, 존재하지 않는다면 프로그래머가 직접 구성을 해도 되겠지요?

그럼 어뎁터 패턴에 대해서 간단히 더 이야기 해봅시다.

어뎁터 패턴에서는
1. 변환을 당하는 원본이 존재합니다. 개조를 당하기 때문에 Adaptee 라고 하더군요.
2. 그리고 변환을 하는 Adapter 가 존재합니다. 실질적으로 가장 중요합니다.
3. 어뎁터로 변환된 녀석이 존재합니다. 타겟이라고 하더랍니다.
4. 이를 사용하는 클라이언트가 존재합니다. 의뢰자입니다.

음.. 이렇게 정리를 하고는 있지만 위에서 이야기 했던 API의 내용을 가지고는 뭔가 부족하고 맞지 않는 부분이 존재할 것이라 생각됩니다.

인터페이스는 Adaptee , 인터페이스를 구현하는 쪽이 Adapter, 그리고 이를 이용하는 클라이언트가 존재하죠..
그럼 타겟에 해당하는 변환된 녀속은 어디로 간 것일까요???

이 이벤트를 무명클래스로 이용한다면 무명클래스가 타겟일까요??
인터페이스를 구현한 Adapter가 타겟 역할도 하는 것일까요??

음..솔직히 여기서 어뎁터를 그대로 이용하기 때문에 어뎁터 자체가 타겟이라고 봐야 할 것 같습니다.

어뎁터 패턴이라는 것이 꼭 위에서 요약한 데로만 이용되야 하는 것은 아니라고 생각하기 때문입니다. 불편하거나 바로 이용을 할 수 없는 경우를 어뎁터라는 것을 통해서 편리하게 이용하는 것이 목적이기 때문입니다.

실제로 이 내용은 자바언어로 배우는 디자인 패턴 책에서 학습한 내용이기 때문에 책을 구해서 참고하시길 바랍니다. 내용이 한번 읽고 대부분 물음표를 날리게 되는 부분이 많지만 꾸준히 학습을 하니 프로그래밍 방식에 도움 되더군요.

그럼 다음에 또 만나요 - 0-/

by 만성피로 | 2008/10/13 20:40 | 정리할 자료들 | 트랙백 | 덧글(1)

트랙백 주소 : http://maydaisy.egloos.com/tb/950121
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/10/16 23:41
좋은 설명입니다.^^

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶