장점
- 구조 패턴중 하나로 기존 클래스를 감싼 새로운 클래스를 생성한다. 그리고 새로운 클래스로 객체의 인터페이스를 재구성한다.
- 객체를 구성으로 결합하면 느슨한 연결 방식으로 보다 많은 유연성을 확보할 수 있다. 그리고 구성을 프로그램이 실행되는 도중에도 객체를 변경할 수 있다.
- 기존 코드가 하던 일과 특정 인터페이스 구현체로 변환하는 작업을 각기 다른 클래스로 분리하여 관리할 수 있다.
- 역할에 맞게 코드를 분리하는 것은 객체지향 원칙 중 단일 책임 원칙에 해당한다.
- 재사용성 증가
- 기존에 작성된 코드나 클래스를 쉽게 재사용 가능. 즉 코드의 중복을 줄이고 유지 보수를 용이하게 해준다.
- 기존 코드를 손상시키지 않는 것은 객체지향 원칙 중 개방/폐쇄 원칙에 해당한다.
- 확장성
- 새로운 클래스를 추가하거나, 기존 클래스를 변경하는 것이 용이하다. 이는 소프트웨어의 확장성을 높이는데 도움을 준다.
단점
- 객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성한다. 어댑터가 새로운 메서드를 재구성할 때 추가 코드가 필요하다.
- 프로젝트에서 어댑터 패턴을 적용한다고 코드의 성능이 개선되지는 않는다.오히려 어댑터를 통해야 하므로 속도가 저하된다.
- 코드 복잡성 증가
- 어댑터 패턴을 사용하면 클래스의 수가 증가하고, 이로 인해 코드가 복잡해질 수 있다.

Target은 변화에 대한 요구 사항이다.
Adaptee는 기존의 코드
Adapter는 변화에 대한 요구사항을 구현한 새로운 코드.
Adpatee가 가지고 있는 기능을 Adapter가 주입받아 Operation()을 구현한다.
Client는 인터페이스인 Target을 통해 이를 사용할 수 있게 된다.