본문 바로가기
Design Pattern

디자인 패턴 - adapter pattern

by SuldenLion 2022. 4. 10.
반응형

어댑터 패턴 : 특정 객체의 기능에 어댑터를 wrapping 함으로써 그 객체의 기능을 변경시키는 방법

한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 인터페이스로 변환. 어댑터를 사용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. -> 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. + 클라이언트와 구현된 인터페이스를 분리시킬수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없어짐.

 

어댑터는 5핀 usb 끝에 달린 c-type 어댑터나 외국 전기 콘센트에 끼우기 위한 220v 플러그에 달린 110v 어댑터 느낌.

기존 시스템 >  ) 업체에서 제공한 클래스

└> 기존 시스템 > >어댑터) )업체에서 제공한 클래스

클라이언트 -> request() -> 어댑터 -> translatedRequest() -> 어댑티. 클라이언트는 타겟 인터페이스에 맞게 구현. 어댑터는 타겟 인터페이스를 구현하며, 어댑티 인스턴스가 들어있음.

 

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

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

 

어댑터 패턴을 적용한 case : 

- 구식 Enumeration : Enumeration을 리턴하는 elements() 메서드가 구현되어 있었던, 초기 컬렉션 형식(Vector, Stack, Hashtable 등) Enumeration 인터페이스를 이용하면 컬렉션 내에서 각 항목이 관리되는 방식에는 신경 쓸 필요 없이 컬렉션의 모든 항목에 접근 가능.

- 신형 Iterator : Sun에서 새로운 컬렉션 클래스를 출시하면서, Enumeration과 마찬가지로 컬렉션에 있는 일련의 항목들에 접근할 수 있게 해주면서 항목을 제거할 수도 있게 해주는 iterator 인터페이스

개발을 하다보면, Enumeration 같은 구형 코드 쓰던 곳에 Enumeration 대신 Iterator들로 쓰기로 했을때 적용하면 되는 패턴. (근데 이런경우는 잘 없다고 함. 한가지로 통일해서 원래 코드를 지우던가 옛날 코드스타일로 통일한다고 함)

 

 

반응형

댓글