mojo's Blog

Adapter Pattern 본문

Design Patterns

Adapter Pattern

_mojo_ 2024. 6. 9. 15:03

Adapter Pattern

 

- 목적

   서로 다른 인터페이스를 가진 클래스가 통신하고 상호 작용할 수 있는 공통 객체를 만들어

   함께 작동할 수 있도록 허용하는 것

- 사용시기

   사용할 클래스가 인터페이스 요구 사항을 충족하지 않을 때

 

※ Mechanism

- 클라이언트가 대상 인터페이스를 사용하여 어댑터의 메서드를 호출하여 어댑터에 요청

- 어댑터가 어댑터 인터페이스를 사용하여 요청을 어댑터에 대한 하나 이상의 호출로 변환

- 클라이언트는 통화 결과를 수신하고 번역을 수행하는 어댑터가 있는지 전혀 알지 못함

 

※ Object Adapter v.s. Class Adapter

Object Adapter는 object composition 및 delegation 을 사용한다.

Class Adapter는 상속을 사용한다.

 

※ Enumerators v.s. Iterator

Enumeration

- Vector, Stack, HashTable와 같은 컬렉션 타입

- hasMoreElements()

- nextElement()

 

Iterator

- hasNext()

- next()

- remove()

 

Adapting Enumeration to Iterator (EnumerationIterator)

Object Adapter 방식을 활용하여 EnumerationIterator 어댑터를 구현하도록 한다.

 

public class EnumerationIterator implements Iterator {
    Enumeration enum;
    
    public EnumerationIterator(Enumeration enum) {
    	this.enum = enum;
    }
    public boolean hasNext() {
    	return enum.hasMoreElements();
    }
    public Object next() {
    	return enum.nextElement();
    }
    public void remove() {
    	throw new UnsupportedOperationException();
    }
}

Enumeration 객체를 받아와서 Iterator 을 구현할 때 enum의 메서드를 활용하여 새로 구현한다.

remove() 메서드의 경우 지원하지 않기 때문에 exception 을 던진다.

 

※ Adapter Pattern

- 클래스의 인터페이스를 클라이언트가 원하는 다른 인터페이스로 변환

- 호환되지 않는 인터페이스 때문에 달리 할 수 없었던 클래스를 함께 작동하도록 함

- 클래스 어탭터와 객체 어댑터가 존재함

 

'Design Patterns' 카테고리의 다른 글

Bridge Pattern  (0) 2024.06.24
Composite Pattern  (3) 2024.06.09
Decorator Pattern  (0) 2024.06.09
Singleton Pattern  (1) 2024.06.09
Builder Pattern  (0) 2024.06.09
Comments