mojo's Blog
Adapter Pattern 본문
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 |