해외 여행 갔을 때, 전원 어댑터 규격이 맞지 않았던 경우 있으신가요?
코드를 작성할 때도 마찬가지인 경우가 생길 수 있습니다.
그래서 어댑터 패턴이라는 것이 등장하였습니다.
이는 클라이언트의 요구 타입과 반환 타입이 다를지라도 중간에 어댑터를 둠으로써 둘을 연결해주는 것입니다.
public class Math {
public static double twoTime(double num) {
return num * 2;
}
public static double half(double num) {
return num / 2;
}
}
기존에 double 타입의 값을 받아 두 배를 반환하는 twoTime 메서드와 절반을 반환하는 half 메서드가 있습니다.
그런데 요구사항이 있습니다.
1. Float 매개변수를 받아 수의 두 배를 Float 타입으로 반환하는 twiceOf 메서드를 구현
2. Float 매개변수를 받아 수의 절반은 Float 타입으로 반환하는 halfOf 메서드를 구현
3. 구현 객체는 Adapter로 지정
Adapter.java
public interface Adapter {
public Float twiceOf(Float f);
public Float halfOf(Float f);
}
AdapterImpl.java
public class AdapterImpl implements Adapter {
@Override
public Float twiceOf(Float f) {
return (float) Math.twoTime(f.doubleValue());
}
@Override
public Float halfOf(Float f) {
return (float) Math.half(f.doubleValue());
}
}
main.java
public class main {
public static void main(String[] args) {
Adapter adapter = new AdapterImpl();
System.out.println(adapter.twiceOf(100f));
System.out.println(adapter.halfOf(50f));
}
}
기존에 존재하던 twoTime, half 메서드를 이용해서 전혀 다른 인자값을 받아 로직을 수행하도록 완성되었습니다.
이를 통해 우리는 매번 요구사항마다 새로운 알고리즘을 만들거나 타입별로 비슷한 알고리즘들을 새로 구현할 필요 없이 기존의 알고리즘을 변형해 재활용할 수 있게 됩니다.
예를 들어 리스트컬렉션을 기준으로 버블정렬을 해야하는 요구사항이 생겼을 때 나한테 배열을 기준으로 버블정렬을 구현한 알고리즘이 있다면, 굳이 리스트컬렉션을 이용한 새로운 알고리즘을 구현할 필요 없이 리스트를 배열로 만들어서 알고리즘을 수행 후 다시 리스트컬렉션으로 변환하는게 낫습니다.
'공부하면서 얻은 지식들' 카테고리의 다른 글
CUDA (2) | 2022.12.29 |
---|---|
로깅(Logging) (0) | 2022.11.27 |
import os [파이썬 자동화] (0) | 2022.11.08 |
파일 모드 (r모드, w모드, a모드, +) (0) | 2022.10.22 |
JSX (0) | 2022.07.03 |