[디자인패턴] Adapter Pattern
Apr 21, 2019 16:11 · 459 words · 1 minute read
Adapter란?
- 기계, 기구 등을 다목적으로 사용하기 위한 부가기구
- 전기 110v 코드를 220v 로 바꿔주는 것 또한 어댑터
코드에서도 마찬가지로 사용처에 맞게 변환을 해주는 역할을 한다.
Math 라는 클래스가 있고 메서드는 double로 값을 받고 리턴값도 double 로 내보낸다.
public class Math {
public static double twoTime(double num) {
return num * 2;
}
public static double half(double num) {
return num / 2;
}
}
adapter 인터페이스
public interface Adapter {
//원하는 기능
public Float twiceOf(Float f);
public Float halfOf(Float f);
}
어댑터 인터페이스를 구현할 클래스 double로 매개변수와 리턴값을 가진 twoTime 메서드를 float타입으로 사용할 수 있게 코드를 작성
public class AdapterImpl implements Adapter {
@Override
public Float twiceOf(Float f) {
return (float) Math.twoTime(f.doubleValue());
// return Math.twoTime(f.doubleValue()).floatValue();
}
@Override
public Float halfOf(Float f) {
return (float)Math.half(f.doubleValue());
}
}
메인 클래스 어댑터 인터페이스를 통해 double이 아닌 float 타입 사용 가능
public class Main {
public static void main(String[] args) {
Adapter adapter = new AdapterImpl();
System.out.println(adapter.twiceOf(100f));
System.out.println(adapter.halfOf(80f));
}
}
만약 halfOf 메서드를 사용할 때 출력문을 추가해야 한다면, Math 클래스의 메서드에 직접 추가시 Math를 사용하는 모든 코드에서 출력문이 추가되는 사태 발생 그래서 인터페이스를 구현한 클래스 AdapterImpl의 메서드에 추가
@Override
public Float halfOf(Float f) {
System.out.println("절반 함수 호출");
return (float)Math.half(f.doubleValue());
}