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형태로 가져오는것이다.
장점
- 어댑터 패턴은 구조 패턴 중 하나로 기존 클래스를 감싼 새로운 클래스를 생성한다. 그리고 새로운 클래스로 객체의 인터페이스를 재구성한다.
- 객체를 구성으로 결합하면 느슨한 연결 방식으로 보다 많은 유연성을 확보할 수 있다. 그리고 구성은 프로그램이 실행되는 도중에도 객체를 변경할 수 있다.
- 어댑터는 복잡한 객체 구조를 깔끔하게 정리하는 데 유용하다.
단점
- 객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성한다. 어댑터가 새로운 메서드를 재구성할 때 추가 코드가 필요하다.
- 프로젝트에서 어댑터 패턴을 적용한다고 코드의 성능이 개선되지는 않는다. 오히려 어댑터를 통해야 하므로 속도가 저하된다.
반응형
댓글