어댑터 디자인 패턴(Adapter Pattern)이란?
- 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것! (like 휴대폰 충전기)
- 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다.
- 이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화되기 때문에 클라이언트는 바뀔 필요가 없어진다.
- 개방 폐쇄 원칙을 활용한 설계 패턴이다.
- JDBC, JRE도 어댑터 패턴!
어댑터 패턴 호출 과정
- 클라이언트에서는 타겟 인터페이스를 호출하는 것처럼 보인다.
- 하지만 클라이언트의 요청을 전달받은 (타겟 인터페이스를 구현한) 어댑터는 자신이 감싸고 있는 어댑티에게 실질적인 처리를 위임한다.
- 어댑터가 어댑티를 감싸고 있는 것 때문에 Wrapper 패턴이라고도 불린다.
클라이언트에서 어댑터를 사용하는 방법
- 클라이언트에서 타겟 인터페이스를 사용하여 메서드를 호출함으로써 어댑터에 요청을 한다.
- 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티에 대한 하나 이상의 메서드를 호출로 변환한다.
- 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 전혀 알지 못한다.
그래서 이걸 왜 쓰는데?
결국 어댑터 패턴이라는 것은 모든 것을 하나의 인터페이스로 추상화하기 힘들기 때문에 사용된다.
기존 라이브러리가 더 이상 실제 서비스와 맞지 않아 다시 만들어야 하는데,
이 라이브러리를 다른 부서에서도 사용하고 있다고 생각해 보자.
이 라이브러리를 고치게 되면, 다른 부서에 영향을 끼치게 될 것이다.
그럴 경우 어댑터 패턴을 이용하면 기존 라이브러리를 건들지 않으면서 새로운 기능을 추가시킬 수 있다.
특히 정책이 자주 바뀌는 경우, 계속해서 라이브러리를 바꿔야 할까?
기존의 것을 최대한 건들지 않고 구현할 수 있어야 한다.
그렇기 때문에 오래된(?) 프레임워크 혹은 많은 사람들이 개발해야 하는 프로그램에는 xxxAdapter라는 이름을 이용해서 기존에 만들었던 코드를 고치지 않고 어댑터를 사용하는 예시를 흔하게 확인해 볼 수 있다.
한 줄 마무리
📌 어댑터 패턴이 뭐다?!
호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴이다.
※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.
'📖 Books > 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
[Books] PSA 일관성 있는 서비스 추상화..요? (0) | 2023.03.24 |
---|---|
[Books] 하나의 객체는 하나의 책임만 가져야 한다? (0) | 2023.03.03 |
[Books] Java에 초기화 블록이 있다는 사실 아셨나요? (0) | 2023.02.28 |
[Books] 클래스와 객체의 관계가 붕어빵과 붕어빵 틀이 아니라고?! (0) | 2023.02.27 |
[Books] 전역변수 사용을 왜 지양해야 할까? (0) | 2023.02.25 |