BanditBool2 / ReadingRecord

2 stars 0 forks source link

[CH1] 1.6 패턴 매칭 (pattern matching) #7

Closed JinseoPark-bd closed 1 year ago

JinseoPark-bd commented 1 year ago

자바 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);
}
chaewon-io commented 1 year ago

응용해서 생각 볼 수 있는 내용 공유해 주셔서 감사합니다::)

추가로 스칼라 프로그래밍 관련하여 참고해 보시면 좋을 것 같은 자료 링크 첨부합니다 : https://wikidocs.net/24674