본문 바로가기
Spring/DesighPattern

GOF패턴- Adapter Pattern (구조)

by windy7271 2023. 2. 21.
728x90
반응형

 

Adapter 란 부가기구 이다 .

 

어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.

 

package Adapter;

public interface Adapter {

    public Float twiceOf(Float f);
    public Float halfOf(Float f);
}

 

 

package Adapter;

public class Math {
    // 요구사항이 float 이라 안됨
    public static double twotime(double num) {
        return num*2;
    }
    public static double half(double num) {
        return num/2;
    }

    //강화된 알고리즘
    public static Double doubled(Double d) {
        return d*2 ;
    }
}

 

package Adapter;

public class AdapterImpl implements Adapter{


    @Override
    public Float twiceOf(Float f) {
        return Math.doubled(f.doubleValue()).floatValue();
//        f를 double 로 바꾸고 return 할때 float 으로
    }

    @Override
    public Float halfOf(Float f) {
        return (float) Math.half(f.doubleValue());

    }
}

 

 

package Adapter;

public class Main {
    public static void main(String[] args) {

        Adapter adapter = new AdapterImpl();

        System.out.println(adapter.twiceOf(100f));
        System.out.println(adapter.halfOf(100f));
    }
}

 

이미 만들어진 클래스 Math 에서 double 형태를 원하면 double로 할 수 있지만 클라이언트가 Float 형태를 원하면

Adapter 를 통해 Float 를 바꿔서 리턴해주는것이다.

 

main 에서 요청하면 adaptimpl 에서 double 형태를 Float형태로 가져오는것이다.

장점

  • 어댑터 패턴은 구조 패턴 중 하나로 기존 클래스를 감싼 새로운 클래스를 생성한다. 그리고 새로운 클래스로 객체의 인터페이스를 재구성한다.
  • 객체를 구성으로 결합하면 느슨한 연결 방식으로 보다 많은 유연성을 확보할 수 있다. 그리고 구성은 프로그램이 실행되는 도중에도 객체를 변경할 수 있다.
  • 어댑터는 복잡한 객체 구조를 깔끔하게 정리하는 데 유용하다.

단점

  • 객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성한다. 어댑터가 새로운 메서드를 재구성할 때 추가 코드가 필요하다.
  • 프로젝트에서 어댑터 패턴을 적용한다고 코드의 성능이 개선되지는 않는다. 오히려 어댑터를 통해야 하므로 속도가 저하된다.
반응형

댓글