본문 바로가기
Delvelopment/DesignPattern

[Design Pattern] 적응자 패턴 (Adapter Pattern)

by 제제킴 2022. 7. 3.
반응형

어댑터 패턴(Adapter Pattern)은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와줍니다.

어댑터패턴을 사용하면 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. 인터페이스를 변환해주는 어댑터를 만들면 되기 때문이다.

해드퍼스트 디자인패턴

  • 어댑터 패턴은 여러 객체지향 원칙을 반영하고 있다. 어댑티(Adaptee)를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(composition)을 사용한다. 이런 접근법은 어댑티의 모든 서브클래스에 어댑터를 쓸 수 있다는 장점을 가지고 있다.
  • 이 패턴은 클라이언트를 특정 구현이 아닌 인터페이스에 연결한다. 서로 다른 클래스로 변환시키는 여러 어댑터를 사용할 수도 있다.

어댑터 패턴에는 두가지 종류가 있다.

  • 객체 어댑터
    • 객체 구성 (Composiotion)
  • 클래스 어댑터
    • 다중 상속이 필요함. (자바에서는 불가)

해드퍼스트 디자인패턴

package pattern.adapter;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;

public class EnumerationIterator implements Iterable<Object>{

    Enumeration<?> enumeration;

    public EnumerationIterator(Enumeration<?> enumeration) {
        this.enumeration = enumeration;
    }

    public boolean hasNext(){
        return enumeration.hasMoreElements();
    }

    public Object next(){
        return enumeration.nextElement();
    }

    public void remove(){
        throw new UnsupportedOperationException();
    }

    @Override
    public Iterator<Object> iterator() {
        return null;
    }

    @Override
    public void forEach(Consumer<? super Object> action) {
        Iterable.super.forEach(action);
    }

    @Override
    public Spliterator<Object> spliterator() {
        return Iterable.super.spliterator();
    }
}

어댑터 패턴(Adapter Pattern)은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와줍니다.

어댑터패턴을 사용하면 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. 인터페이스를 변환해주는 어댑터를 만들면 되기 때문이다.

  • 어댑터 패턴은 여러 객체지향 원칙을 반영하고 있다. 어댑티(Adaptee)를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(composition)을 사용한다. 이런 접근법은 어댑티의 모든 서브클래스에 어댑터를 쓸 수 있다는 장점을 가지고 있다.
  • 이 패턴은 클라이언트를 특정 구현이 아닌 인터페이스에 연결한다. 서로 다른 클래스로 변환시키는 여러 어댑터를 사용할 수도 있다.

어댑터 패턴에는 두가지 종류가 있다.

  • 객체 어댑터
    • 객체 구성 (Composiotion)
  • 클래스 어댑터
    • 다중 상속이 필요함. (자바에서는 불가)
package pattern.adapter;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;

public class EnumerationIterator implements Iterable<Object>{

    Enumeration<?> enumeration;

    public EnumerationIterator(Enumeration<?> enumeration) {
        this.enumeration = enumeration;
    }

    public boolean hasNext(){
        return enumeration.hasMoreElements();
    }

    public Object next(){
        return enumeration.nextElement();
    }

    public void remove(){
        throw new UnsupportedOperationException();
    }

    @Override
    public Iterator<Object> iterator() {
        return null;
    }

    @Override
    public void forEach(Consumer<? super Object> action) {
        Iterable.super.forEach(action);
    }

    @Override
    public Spliterator<Object> spliterator() {
        return Iterable.super.spliterator();
    }
}
반응형

댓글