자바 디자인패턴

[Java Design Pattern] 자바 디자인패턴, Adapter 패턴(어댑터 패턴)

코딩하는흑구 2019. 9. 5. 14:16
Adapter 패턴

- 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.

- 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

 

 

예제
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;}
}

- 다음과 같이 이미 구현된 기능이 존재할 때, Math 클래스에 정의된 알고리즘을 이용하여 float 타입을 반환하는 기능을 구현하고자 한다면. 

- Math 클래스의 기능은 그대로 사용하되 호환을 맞추어 타입 캐스팅만 해주면 되는 것!

- 어댑터 인터페이스는 다음과 같다.

public interface Adapter {
	//원하는기능
	public Float twiceOf(Float f);
	//원하는기능	
	public Float halfOf(Float f);
	//강화된 알고리즘
	public Float doubledOf(Float f);
}

- Adapter 인터페이스를 구현하는 클래스는 다음과 같다.

public class AdapterImpl implements Adapter{
	@Override
	public Float twiceOf(Float f) {
		return Math.doubled(f.doubleValue()).floatValue();
	}
	@Override
	public Float halfOf(Float f) {
		System.out.println("절반 함수 호출");
		return (float)Math.half(f.doubleValue());
	}
	@Override
	public Float doubledOf(Float f) {
		System.out.println("강화된 두배함수 호출");
		return new Float(Math.doubled(f.doubleValue()));
	}
}

- 구현 클래스는 Math 클래스의 정적메소드를 호출하여 간단한 타입캐스팅만 진행하여 알고리즘은 Math 클래스에 정의된 로직을 따르고, 타입 호환성만 맞추어 제공하는 클래스가 됩니다.