어댑터 ( Adapter ) 패턴

Kim-Repository·2024년 4월 1일

디자인패턴

목록 보기
2/2

어댑터 패턴이란

  • 기존 코드를 재사용하기 위해 내적,외적 구조를 변환하는 작업을 처리한다.
  • 기능상 문제없이 동작하는 코드가 단지 인터페이스의 차이 때문에 사용할 수 없는 경우 많이 응용되는 패턴이다. 또 기존 코드에 오류가 있거나 보정 작업이 필요한 경우에도 유용하다.
  • 오래된 레거시 코드나 라이브러리를 재사용할 때 유용한 패턴이다. 또한 어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 코드를 결합하여 응용 프로그램에서 동작할 수 있도록 도와준다.
  • 외부 라이브러리 클래스를 사용하고 싶은데, 클래스의 인터페이스가 다른 코드와 호환되지 않을때 이를 해결해줄 수 있다.
  • 여러 자식 클래스가 있는데, 부모 클래스를 수정하기엔 호환성이 문제가 될 때 이를 해결해줄 수 있다.

어댑터 패턴의 장단점

장점

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

단점

  • 객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성한다. 어댑터가 새로운 메서드를 재구성할 때 추가 코드가 필요하다.
  • 프로젝트에서 어댑터 패턴을 적용한다고 코드의 성능이 개선되지는 않는다.오히려 어댑터를 통해야 하므로 속도가 저하된다.
  • 코드 복잡성 증가
    • 어댑터 패턴을 사용하면 클래스의 수가 증가하고, 이로 인해 코드가 복잡해질 수 있다.

어댑터 패턴의 종류

클래스 어댑터 패턴

  • 이 패턴은 상속을 이용해서 Adaptee클래스의 인터페이스를 Target 인터페이스로 변환합니다. 이 패턴의 문제점은 자바와 같은 단일 상속언어에서는 하나의 클래스만 상속할 수 있기 때문에, 한번에 여러 Adaptee를 대상으로 할 수 없습니다.

객체 어댑터 패턴

  • 이 패턴은 합성을 사용해서 여러개의 Adaptee를 대상으로 할 수 있습니다. 객체 어댑터는 Target 인터페이스를 구현하고, Adaptee인스턴스를 포함하는 클래스를 만듭니다. 이 방식은 클래스 어댑터의 제약 사항을 해결하며, 어떤 클래스가 Adaptee로 사용될지를 런타임에 결정할 수 있는 유연성을 제공합니다.

자바에서는 객체 댑터 패턴을 더 권장, 객체 어댑터 패턴은 클래스 어댑터보다 더 유연하며, 어떤 클래스가 Adaptee로 사용될지를 런타임에 결정할 수 있기때문.

어댑터 패턴 구조

  • Target은 변화에 대한 요구 사항이다.

  • Adaptee는 기존의 코드

  • Adapter는 변화에 대한 요구사항을 구현한 새로운 코드.

  • Adpatee가 가지고 있는 기능을 Adapter가 주입받아 Operation()을 구현한다.

  • Client는 인터페이스인 Target을 통해 이를 사용할 수 있게 된다.

주의사항

  • 기존의 클래스를 수정할 수 없는 경우에는 Adapter를 도입해야 하지만, 수정이 가능하다면 Adapter를 도입하지 않는것이 더 간단하게 코드를 짤 수 있다.
profile
K - Development Blog

0개의 댓글