- 한 클래스의 인터페이스를 사용하고자 하는 다른 인터페이스로 변환할 때 사용하는 패턴이다.
- 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
- 지원하지 않는 인터페이스를 지원하는것 처럼 만든다.
- 직접적으로 호출하지 않고 중간에 어댑터를 통해 호출함으로서 호환성이 없더라도 함께 동작할 수 있고 유지보수를 쉽게 할 수 있다.
- 클라이언트가 서로 다른 클래스들에 의존하고자 할 때 하나의 추상화된 인터페이스로 의존되어야 할 경우 사용할 수 있다.
- 이미 만들어진 클래스를 재사용이 필요할 때 기존의 클래스를 개조해서 필요한 클래스를 만든다.
- 필요한 함수들을 빠르게 만들 수 있다.
- 버그가 발생해도 기존의 클래스에는 버그가 없으므로
Adapter역할의 클래스를 중점적으로 조사하면 된다.
- 이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조시킬때
Adapter패턴을 사용한다.Adapter패턴은 기존의 클래스를 수정하지 않고 목적 인터페이스에 맞춘다.- 기존 클래스의 인터페이스만 알면 새로운 클래스를 만들 수 있다.
- 상속을 사용한
Adapter
Adapter가Adaptee의 서브 클래스이기 때문에Adaptee의 행동을 오버라이드 할 수 있다.Adaptee객체를 만들지 않아도 된다.Adapter클래스가 특정Adatee클래스에만 적용가능하다.
- 위임을 사용한
Adapter
- 상속이 아닌 구성을 사용하기 때문에 더 유연하다
Adaptee객체를 만들어야 사용가능하다.
Third Party라이브러리나 외부시스템을 사용하는 부분이다.
Third Party라이브러리나 외부시스템을 의미한다.
Adapter가 구현(implements) 하는 인터페이스이다. 클라이언트는Target Interface를 통해Adaptee인 써드파티 라이브러리를 사용하게 된다.
Client와Adaptee중간에서 호환성이 없는 둘을 연결시켜주는 역할을 담당한다.Target Interface를 구현하며, 클라이언트는Target Interface를 통해 어댑터에 요청을 보낸다.- 어댑터는 클라이언트의 요청을
Adaptee가 이해할 수 있는 방법으로 전달하고, 처리는Adaptee에서 이루어진다.
- 관계가 없는 인터페이스 간 같이 사용이 가능하다.
- 프로그램 검사가 용이하다.
- 클래스 재사용성이 증가한다.
- 어댑터 클래스에서 통일 시켜주는 부분을 하나씩 구현해야 한다.


