어댑터 패턴

구조도⌗
Client
라이브러리나 외부 시스템을 사용하려는 요소
Adaptee
사용될 라이브러리나 외부 시스템
Target
어댑터가 구현하는 인터페이스
클라이언트는 인터페이스를 통해 어댑터와 연결된 Adaptee
를 사용하게 된다.
Adapter
Client
와 Adaptee
중간에서 호환성이 없는 둘을 연결하는 역활
어댑터 패턴이란?⌗
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에
같이 쓸 수 없는 클래스를 연결해서 쓸 수 있음.
왜 사용해야 할까?⌗
인터페이스 호환 문제로 같이 쓸 수 없을 경우 사용한다곤 하는데
왜 써야할까?
단순하게 사용할 수 있게 수정하면 되지 않을까?
어댑티 쪽을 수정한다고 가정하면…⌗
어댑티가 제공받은 라이브러리로써 직접적으로 수정이 불가능할 경우에 문제가 생길 수 있다.
수정이 가능할 경우 이후 어댑티가 제공자에 의해 수정되는 경우
해당 수정내용을 반영한 어댑티를 다시 수정해야 한다..
그렇다면 클라이언트 쪽은 어떨까…⌗
클라이언트의 경우 단순한 구조라면 별 문제가 발생하지 않지만
구조가 복잡해지거나 클라이언트의 연관관계가 많아질 경우
클라이언트 수정시 다른 곳에서 문제가 발생할 수 있다
요약하자면⌗
클라이언트와 어댑티를 수정하지 않고도 사용할 수 있게 해주는 패턴으로
수정시 발생할 수 있는 사이드 이펙트를 막게 해준다.
참조⌗
- Head First Design Patterns
- 예제 소스