본문으로 바로가기

디자인패턴- Adapter

category 프로그래밍 언어/Java 2019. 8. 21. 16:42

Adapter

어댑터는 다목적 사용을 위해서 사용합니다. 즉 인터페이스를 이용합니다.

예를 들어서 Math 라이브러리가 타입이 float일 경우 double로 사용하려면 변경로직이 필요하겠죠.

이럴 때 다목적으로 사용하기 위해서 Adapter 인터페이스를 만들어줍니다.

 

요구사항

  • 두 수에 대한 다음 연산을 수행하는 객체를 만들자.
    • 수의 두 배를 반환: twiceOf(Float):Float
    • 수의 반(1/2)를 반환: halfOf(Float):Float
  • 구현 객체 이름은 Adapter
  • Math에 메서드는 이미 구현되어있음.

우선 Math를 보면 아래와 같이 이미 구현이 되어있습니다. double형이죠.

Math.java

package com.jeongchan.adapte;

public class Math {

	//두배
	public static double twoTime(double num) {
		return 2*num;
	}
	//절반
	public static double halfnum(double num) {
		return num/2;
	}
	
	//강화된 알고리즘
	public static Double doubled(Double d) {
		return d*2;
	}
}

이제 어댑터(Adapter)를 만들어줍시다. 인터페이스입니다.

Adapter.java

package com.jeongchan.adapte;

public interface Adapter {
	
	//원하는 기능
	
	public Float twiceOf(Float f);
	
	public Float halfOf(Float f);
	
}

이를 구현하는

AdapterImpl.java

package com.jeongchan.adapte;

public class AdapterImpl implements Adapter {

	@Override
	public Float twiceOf(Float f) {
		// TODO Auto-generated method stub
		//변경 로직이 필요
//		return (float)Math.twoTime(f.doubleValue());
		return Math.doubled(f.doubleValue()).floatValue();
	}

	@Override
	public Float halfOf(Float f) {
		// TODO Auto-generated method stub
		//로그는 Math가 아닌 여기에 
		System.out.println("절반함수 호출");
		return (float)Math.halfnum(f.doubleValue());
	}

}

return에서 변경사항이 있으면 해당 로직을 바꿔주기만 하면 다용도로 사용가능합니다.

 


Main.java

package com.jeongchan.adapte;

public class Main {
	public static void main(String[] args) {
		Adapter adapter = new AdapterImpl();
		
		System.out.println(adapter.twiceOf(100f));
		System.out.println(adapter.halfOf(88f));
	}
}
200.0
절반함수 호출
44.0

'프로그래밍 언어 > Java' 카테고리의 다른 글

디자인패턴 - 전략패턴  (0) 2019.08.23
디자인패턴-팩토리메소드  (0) 2019.08.23
디자인 패턴- Template Method Pattern  (0) 2019.08.21
자바 공부(취업 준비)  (0) 2019.07.29
Java - 람다  (0) 2019.07.28