📖 Books/자바 객체 지향의 원리와 이해

[Books] 어댑터요? 돼지코 같은건가? 🐷

오늘 ONEUL 2023. 3. 6. 23:59

 

어댑터 디자인 패턴(Adapter Pattern)이란?

  • 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것! (like 휴대폰 충전기)
  • 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다.
  • 이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화되기 때문에 클라이언트는 바뀔 필요가 없어진다.
  • 개방 폐쇄 원칙을 활용한 설계 패턴이다.
  • JDBC, JRE도 어댑터 패턴!

 

 

 

어댑터 패턴 호출 과정

  • 클라이언트에서는 타겟 인터페이스를 호출하는 것처럼 보인다.
  • 하지만 클라이언트의 요청을 전달받은 (타겟 인터페이스를 구현한) 어댑터는 자신이 감싸고 있는 어댑티에게 실질적인 처리를 위임한다.
  • 어댑터가 어댑티를 감싸고 있는 것 때문에 Wrapper 패턴이라고도 불린다.

 

 

 

클라이언트에서 어댑터를 사용하는 방법

  1. 클라이언트에서 타겟 인터페이스를 사용하여 메서드를 호출함으로써 어댑터에 요청을 한다.
  2. 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티에 대한 하나 이상의 메서드를 호출로 변환한다.
  3. 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 전혀 알지 못한다.

 

 

 

그래서 이걸 왜 쓰는데?

결국 어댑터 패턴이라는 것은 모든 것을 하나의 인터페이스로 추상화하기 힘들기 때문에 사용된다.
기존 라이브러리가 더 이상 실제 서비스와 맞지 않아 다시 만들어야 하는데,
이 라이브러리를 다른 부서에서도 사용하고 있다고 생각해 보자.
이 라이브러리를 고치게 되면, 다른 부서에 영향을 끼치게 될 것이다.
그럴 경우 어댑터 패턴을 이용하면 기존 라이브러리를 건들지 않으면서 새로운 기능을 추가시킬 수 있다.

특히 정책이 자주 바뀌는 경우, 계속해서 라이브러리를 바꿔야 할까?
기존의 것을 최대한 건들지 않고 구현할 수 있어야 한다.
그렇기 때문에 오래된(?) 프레임워크 혹은 많은 사람들이 개발해야 하는 프로그램에는 xxxAdapter라는 이름을 이용해서 기존에 만들었던 코드를 고치지 않고 어댑터를 사용하는 예시를 흔하게 확인해 볼 수 있다.

 

 

 

한 줄 마무리

📌 어댑터 패턴이 뭐다?!
호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴이다.

 

 

 

 

※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.