코딩못하는사람

어댑터 패턴(Adapter Pattern) 본문

스프링(Spring)/스프링 디자인 패턴

어댑터 패턴(Adapter Pattern)

공부절대안함 2021. 3. 20. 22:58

1.어댑터 패턴

어댑터 패턴의 이해는 콘센트로 이해할 수 있다. 우리나라에서는 220V의 콘센트를 쓰지만 필요에 따라서   
110V,22V,11V에 맞춰서 다양하게 연결되어야 할 때가 있다.이럴 때 우리는 중간에   
220V와 110V가 연결될 수 있도록  호환을 도와주는 인터페이스를 만들어 주어야 한다.

설계도는 다음과 같다.

 

https://yaboong.github.io/design-pattern/2018/10/15/adapter-pattern/

 

클라이언트에서는 Target Interface 를 호출하는 것 처럼 보인다. 하지만 클라이언트의 요청을 전달받은 (Target Interface 를 구현한) Adapter 는 자신이 감싸고 있는 Adaptee 에게 실질적인 처리를 위임한다. Adapter 가 Adaptee 를 감싸고 있는 것 때문에 Wrapper 패턴이라고도 불린다. 예제를 만들어 보았다.

내가 220V 폰 충전기를 가지고 여행한다고 생각하자

나는 220V를 가지고 있는 Client이다. 그런데 이 나라는 110V를 사용한다면 중간에 Adapter를 껴야한다.   
그래서 우리가 필요한 충전메서드를 가지고 있는 Interface를 만들고 인터페이스를 구현한 클래스에 110V 충전 메서드를 이어주면 된다.   
Adapter에 charge라는 메서드를 가지는 Requester 인터페이스를 상속시키고 Adapter에는 Concent 인터페이스를 만들어서 110V 50V 콘센트를 구현해 보았다.  

 

 

이렇게 구현하고 나면 Concent 인터페이스를 구현하는 원하는 크기의 V를 사용 가능하다.

 

이러한 패턴으로 만드는 이유?

우리가 사용하는 인터페이스가 다른 곳에 맞물려 사용하고 있다면 내가 220V에서 110V로 바꿀 때

모든 코드를 바꿔줘야할 필요가 생길수도 있기때문이다. 

 

어댑터 패턴 정리

  • Adaptee 를 감싸고, Target Interface 만을 클라이언트에게 드러낸다.
  • Target Interface 를 구현하여 클라이언트가 예상하는 인터페이스가 되도록 Adaptee 의 인터페이스를 간접적으로 변경한다.
  • Adaptee 가 기대하는 방식으로 클라이언트의 요청을 간접적으로 변경한다.
  • 호환되지 않는 우리의 인터페이스와 Adaptee 를 함께 사용할 수 있다.

우리가 자주 사용하는 InputStreamReader가 어댑터 패턴의 예이다. 한번 생각해보자

 

 

yaboong.github.io/design-pattern/2018/10/15/adapter-pattern/를 보고 공부하였습니다.

 

 

Comments