[디자인패턴] Adapter Pattern

김나우·2022년 9월 20일
0

출처
이야기's G님 유튜브

Adapter Pattern

사전적 의미의 Adapter란?

기계 기구 등을 다목적으로 사용하기 위한 부가 기구

요구사항

두 수에 대한 다음 연산을 수행하는 객체를 만들어 주세요

  • 수의 두 배의 수를 반환 : twiceOf(Float) : Float

  • 수의 반의 수를 반환 : halfOf(Float) : Float

구현 객체 이름은 'Adapter'로

Math 클래스에서 두 배와 절반을 구하는 함수는 이미 구현되어있다.

코드

Math

public class Math {

    //두배
    public static double twoTime(double num){
        return num * 2;
    }

    //절반
    public static double half(double num) {
        return num / 2;
    }
}

Math 클래스에 두 배와 절반을 구하는 함수는 이미 구현되어 있다.

Adapter(인터페이스)

public interface Adapter {

    //원하는 기능
    Float twiceOf(Float f);

    //원하는 기능
    Float halfOf(Float f);
}

어댑터 인터페이스에 원하는 기능을 선언한다.

AdapterImpl(클래스)

public class AdapterImpl implements Adapter {

    @Override
    public Float twiceOf(Float f) {
        System.out.println("두배 함수 호출");
        return (float) Math.twoTime(f.doubleValue());

    }

    @Override
    public Float halfOf(Float f) {
        System.out.println("절반 함수 호출");
        return (float) Math.half(f.doubleValue());
    }
}

기능 구현은 Adapter 인터페이스를 상속받은 AdapterImpl 클래스에다가 해줬다.

Maht 클래스에 선언되어 있는 twoTime과 half를 사용해줬다.

Main

public class Main {

    public static void main(String[] args) {

        Adapter adapter = new AdapterImpl();

        Float float1 = adapter.twiceOf(20.0f);
        Float float2 = adapter.halfOf(20.0f);

        System.out.println("float1 = " + float1);
        System.out.println("float2 = " + float2);
        
    }
}

두배 함수 호출
절반 함수 호출
float1 = 40.0
float2 = 10.0

잘 동작한다.

심화

알고리즘 변경을 원한다.

  • Math 클래스에 새롭게 두 배를 구할 수 있는 함수가 추가 되었다.
    새로 구현된 알고리즘을 이용하도록 프로그램을 수정해주세요.
  • 절반을 구하는 기능에서 로그를 찍는 기능을 추가해주세요

Math

public class Math {

   //두배
   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;
   }
}

AdapterImpl(클래스)

public class AdapterImpl implements Adapter {

    @Override
    public Float twiceOf(Float f) {
        System.out.println("두배 함수 호출");
        return Math.doubled(f.doubleValue()).floatValue();

    }

    @Override
    public Float halfOf(Float f) {
        System.out.println("절반 함수 호출");
        return (float) Math.half(f.doubleValue());
    }
}
profile
안녕하세요

0개의 댓글