반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

[디자인 패턴][어댑터 패턴] 본문

IT/Language_Design Patterns

[디자인 패턴][어댑터 패턴]

현무랑 니니 2016. 1. 19. 19:15
반응형

실생활에서 어댑터의 역할은 한국 플러그를 미국이나 유럽의 소켓에 꽂을 수 있도록 인터페이스를 변환하는 역할을 한다.

객체 지향 어댑터도 일상 생활에서 사용하는 어댑터와 똑같은 역할을 한다.


소프트웨어 시스템은 여러 모듈로 구성되고 여러 업체에서 제공한 인터페이스를 사용한다.

기존 소프트웨어 시스템이 변경 또는 갱신될 수 있고 업체의 인터페이스 역시 그러하다.

새로운 업체의 인터페이스를 채택해야 할 수도 있다.

이때 새로운 업체의 인터페이스가 기존 소프트웨어 시스템과 다르다면 둘 중 하나를 고쳐야 한다.

문제는 양쪽 모두 변경할 수 없는 상황 발생하며 어댑터 패턴이 해결책이 된다.


어댑터 패턴이 동작하는 원리는 다음 그림과 같고 설명은 아래에 추가한다.

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

(1) 클라이언트에서 타겟 인터페이스를 사용하여 메소드를 호출하여 어댑터에 요청한다.

(2) 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티의 하나 이상의 메소드 호출로 변환한다.

(3) 클라이언트에서는 호출의 결과를 받지만 변환 중 어댑터가 있는지를 전혀 알지 못한다.


1. 어댑터(Adapter) 패턴 개념.

어댑터 패턴은 클래스의 인터페이스를 클라이언트가 사용하는 다른 인터페이스로 변환한다.

어댑터는 호환되지 않는 인터페이스 때문에 같이 쓸 수 없는 클래스들을 함께 사용할 수 있게 한다.

인터페이스를 변환하는 어댑터를 생성하면 호환되지 않는 인터페이스를 가진 클라이언트를 사용할 수 있다.

어댑티를 변경된 인터페이스로 감쌀 때는 객체 구성(composition)을 사용한다.

어댑티의 어떤 인터페이스에도 어댑터를 쓸 수 있게 한다.

클라이언트를 특정 구현이 아닌 인터페이스에 연결 시킨다.


어댑터 패턴에는 객체 어댑터와 클래스 어댑터의 두 가지가 있다.

클래스 어댑터 패턴을 쓰려면 다중 상속이 되어야 하는데 이를 지원하지 않는 자바는 불가능하다.


2. 객체 어댑터 패턴 예제.

2.1. Headfirst 예제.

클라이언트는 오리에게 얘기하고 있다고 생각한다.

타켓은 Duck 인터페이스이다. 클라이언트는 Duck 인터페이스의 메소드를 호출한다.

어댑터는 Duck 인터페이스를 구현하고 Duck  인터페이스 메소드가 호출되면 Turkey 메소드 호출로 변환한다.

어댑터 덕분에 어댑티인 Turkey가 클라이언트가 Duck 인터페이스로 만든 메소드 호출을 처리할 수 있다.

반응형
Comments