자바 8에서는 패턴 매칭을 완벽하게 지원하지 않아 if-then-else나 switch문을 사용해서 구현하곤 하는데, 스칼라 프로그래밍에서는 지원하는 패턴 매칭을 자바8에서 람다를 사용하여 흉내내는 방법이 있다고해서 찾아보았습니다.
//예시) 가솔린, 디젤, 전기 차량에 따라 다른 연료를 주입하는 자동차 로직
//if-then-else의 방식
public class Car {
}
public class GasolineCar extends Car {
}
public class DieselCar extends Car {
}
public class ElectricCar extends Car {
}
public Car fuel(Car car) {
if (car instanceof GasolineCar) {
System.out.println("휘발유 주유");
} else if (car instanceof DieselCar) {
System.out.println("경유 주유");
} else {
System.out.println("전기 충전");
}
return car;
}
->
//스칼라의 패턴 매칭 방식을 람다을 이용하여 흉내내기
public Car simplyPatternMatchFuel(Car targetCar) {
Function<Car, Car> gasolineCarFuel = (car) -> { System.out.println("휘발유 주유"); return car;};
Function<Car, Car> dieselCarFuel = (car) -> { System.out.println("경유 주유"); return car;};
Function<Car, Car> electricCarFuel = (car) -> { System.out.println("전기 충전"); return car;};
Supplier<Car> defaultFuel = () -> { System.out.println("알수없는 유형의 자동차입니다."); return null; };
return patternMatchFuel(targetCar, gasolineCarFuel, dieselCarFuel, electricCarFuel, defaultFuel);
}
자바 8에서는 패턴 매칭을 완벽하게 지원하지 않아 if-then-else나 switch문을 사용해서 구현하곤 하는데, 스칼라 프로그래밍에서는 지원하는 패턴 매칭을 자바8에서 람다를 사용하여 흉내내는 방법이 있다고해서 찾아보았습니다.