출처
이야기's G님 유튜브
기계 기구 등을 다목적으로 사용하기 위한 부가 기구
두 수에 대한 다음 연산을 수행하는 객체를 만들어 주세요
수의 두 배의 수를 반환 : twiceOf(Float) : Float
수의 반의 수를 반환 : halfOf(Float) : Float
구현 객체 이름은 'Adapter'로
Math 클래스에서 두 배와 절반을 구하는 함수는 이미 구현되어있다.
public class Math {
//두배
public static double twoTime(double num){
return num * 2;
}
//절반
public static double half(double num) {
return num / 2;
}
}
Math 클래스에 두 배와 절반을 구하는 함수는 이미 구현되어 있다.
public interface Adapter {
//원하는 기능
Float twiceOf(Float f);
//원하는 기능
Float halfOf(Float f);
}
어댑터 인터페이스에 원하는 기능을 선언한다.
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를 사용해줬다.
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
잘 동작한다.
알고리즘 변경을 원한다.
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;
}
}
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());
}
}