Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Lifecycle
- RxSwift
- 추상팩토리패턴
- 상태패턴
- 팩토리메서드패턴
- 데코레이터패턴
- ViewController
- 싱글턴패턴
- 이터레이터패턴
- 스테이트패턴
- 컴포지트패턴
- SWIFT
- Scenedelegate
- DispatchQueue
- WKWebView
- 프록시패턴
- unowned
- 템플릿메서드
- 스트래터지패턴
- 커맨드패턴
- ios
- 디자인패턴
- 옵저버패턴
- 어댑터패턴
- 전략패턴
- Xcode
- 컴파운드패턴
- cocoapods
- Mobile
- 파사드패턴
Archives
- Today
- Total
ios dev kangwook.
08. Adapter Pattern 본문
코드를 재사용하기 위해 구조를 변경해서 클래스들이 호환될 수 있게 연결시키는 패턴
Adapter Pattern
Adapter Pattern은 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환한다. 호환되지 않는 인터페이스로 인해 작동하지 않는 클래스를 Adapter Pattern을 통해 함께 작동할 수 있게 한다.
- Client : Client는 Target 인터페이스만 볼 수 있고 Adaptee를 사용하기 위한 요청을 보냄
- Target : 클라이언트가 보내는 요청에 대한 메소드를 가지고 있음
- Adapter : Target 인터페이스를 구현하며 Client와 Adaptee 중간에서 호환성이 없는 둘을 연결시켜주는 클래스
- Adaptee : Client가 사용하려는 클래스
Adapter Pattern 예제
- Iterator에서 Enumeration을 사용
- Enumeration을 Iterator로 어댑팅 시키는 과정
// Adapter 클래스
public class EnumerationIterator implements Iterator<Object> {
Enumeration<Int> enumeration;
public EnumerationIterator(Enumeration<Int> enumeration) {
this.enumeration = enumeration;
}
// Iterator의 hasNext() 메소드를 Enumeration의 hasMoreElements() 메소드로 호환시킴
public boolean hasNext() {
return enumeration.hasMoreElements();
}
// Iterator의 next() 메소드를 Enumeration의 nextElement() 메소드로 호환시킴
public Object next() {
return enumeration.nextElement();
}
// 하지만 Iterator의 remove()는 지원하지 못했기 때문에 에러를 던져줌
public void remove() {
throw new UnsupportedOperationException();
}
}
결론
-
- Adapter Pattern은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 구조 패턴(Structural Pattern)
- 코드 성능은 저하될 수 있으나 코드 구조를 깔끔하게 개선할 수 있음
- 장점
- 기존의 코드를 변경하지 않아도 해당 메소드를 사용할 수 있음
- 코드를 변경하지 않기 때문에 클래스의 재활용성을 증가시킬 수 있음
- 단점
- 클래스들을 호환시키기 위해 클래스를 더 만들어야하기 때문에 복잡도가 증가할 수 있음
- Adapter 코드에서 호환시켜주는 부분을 하나씩 다 구현해야하기 때문에 시간과 비용이 늘어남
본문은 Head First Design Pattern (2004) 를 참고하여 공부하고 작성하였음
'Design Pattern' 카테고리의 다른 글
10. Template Method Pattern (0) | 2022.08.29 |
---|---|
09. Facade Pattern (0) | 2022.08.27 |
07. Command Pattern (0) | 2022.08.22 |
06. Singleton Pattern (0) | 2022.08.21 |
05. Abstract Factory Pattern (0) | 2022.08.20 |
Comments