구조도

structure.png

Client 라이브러리나 외부 시스템을 사용하려는 요소

Adaptee 사용될 라이브러리나 외부 시스템

Target 어댑터가 구현하는 인터페이스

클라이언트는 인터페이스를 통해 어댑터와 연결된 Adaptee를 사용하게 된다.

Adapter ClientAdaptee 중간에서 호환성이 없는 둘을 연결하는 역활

어댑터 패턴이란?

한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다.

어댑터를 이용하면 인터페이스 호환성 문제 때문에

같이 쓸 수 없는 클래스를 연결해서 쓸 수 있음.

왜 사용해야 할까?

인터페이스 호환 문제로 같이 쓸 수 없을 경우 사용한다곤 하는데

왜 써야할까?

단순하게 사용할 수 있게 수정하면 되지 않을까?

어댑티 쪽을 수정한다고 가정하면…

어댑티가 제공받은 라이브러리로써 직접적으로 수정이 불가능할 경우에 문제가 생길 수 있다.

수정이 가능할 경우 이후 어댑티가 제공자에 의해 수정되는 경우

해당 수정내용을 반영한 어댑티를 다시 수정해야 한다..

그렇다면 클라이언트 쪽은 어떨까…

클라이언트의 경우 단순한 구조라면 별 문제가 발생하지 않지만

구조가 복잡해지거나 클라이언트의 연관관계가 많아질 경우

클라이언트 수정시 다른 곳에서 문제가 발생할 수 있다

요약하자면

클라이언트와 어댑티를 수정하지 않고도 사용할 수 있게 해주는 패턴으로

수정시 발생할 수 있는 사이드 이펙트를 막게 해준다.


참조