-
[디자인패턴] 어댑터 패턴(Adapter Pattern)개발공부 2022. 11. 6. 21:17반응형
어댑터를 [위키백과]에서 찾아보면, 다른 전기나 기계 장치를 서로 연결해서 작동할 수 있도록 만들어주는 결합 도구로 소개하고 있다. 디자인패턴에서의 어댑터도 정의는 크게 다르지 않다.
class EnumerationIterator(private val enumeration: Enumeration<*>): MutableIterator<Any> { override fun hasNext(): Boolean { return enumeration.hasMoreElements() } override fun next(): Any { return enumeration.nextElement() } override fun remove() { throw UnsupportedOperationException() } } class Print { // MutableIterator를 파라미터로 받는다. fun print(i: MutableIterator<Any>) { while (i.hasNext()) { println(i.next()) } } } fun main() { val vt = Vector<String>().apply { this.addElement("A") this.addElement("B") this.addElement("C") this.addElement("D") this.addElement("E") } val enumeration: Enumeration<String> = vt.elements() val iteratorAdapter: MutableIterator<Any> = EnumerationIterator(enumeration) Print().print(iteratorAdapter) }
만약, Print 클래스가 외부 라이브러리고, 내가 수정이 불가능한데 MutableIterator만 파라미터로 사용이 가능하다면 어떻게 할 것인가?
기존 Enumeration으로 구현된 모든 코드를 전부 수정해야 할 것이다. 이때, 어댑터 패턴을 사용하면 기존 코드를 변경 할 필요가 없다.
위 코드를 UML로 그리면 다음과 같다.
EnumerationIterator를 어댑터(adaptor)라 부르고 Enumeration을 어댑티(adaptee)라 부른다.
반응형'개발공부' 카테고리의 다른 글
[규칙 세우기]날짜 및 시간 관련 타입과 사용 (0) 2022.11.18 [디자인패턴] 퍼사드 패턴(Facade Pattern)과 최소 지식 원칙(Principle of Least Knowledge) (0) 2022.11.08 [디자인패턴] 데코레이터 패턴(Decorator Pattern), 랩퍼 패턴(wrapper pattern) (0) 2022.11.06 [리펙토링 데이터베이스] 데이터베이스 냄새와 관리 (0) 2022.11.05 [git][오픈소스 기여하기] git 브랜치 히스토리 비교하기 (0) 2022.08.19