[Java8] 람다와 enum을 이용해 계산기 만들기

최대한·2021년 1월 14일
0
post-thumbnail
post-custom-banner

서론


자바 8 강의 중 람다 or 함수형 프로그래밍으로 확장성 있는 개발을 할 수 있다면서 간단한 예시로 계산기를 만들어서 보여주었다.
문득, 해당 함수를 enum 으로 만들어 재활용할 수 있게 만들어 놓고 사용하면 좋을 것 같아서 연습 겸 만들어본 계산기 ✒️

코드


CalculationService.java (+ Calculable, CalculationType)

import org.springframework.stereotype.Service;

@Service
public class CalculationService {
    public int calculate(CalculationType calculationType, int a, int b){
        return calculationType.getCalculable().calculate(a, b);
    }
}

interface Calculable {
    int calculate(int a, int b);
}

enum CalculationType {
    PLUS((a, b) -> a + b),
    MINUS((a, b) -> a - b),
    MUL((a, b) -> a * b),
    DIV((a, b) -> a / b);

    private final Calculable calculable;

    CalculationType(Calculable calculable) {
        this.calculable = calculable;
    }

    public Calculable getCalculable() {
        return calculable;
    }
}

FunctionalCalculationTest.java

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = CalculationService.class)
public class CalTest {
    private static final Logger log = LoggerFactory.getLogger(CalTest.class);
    @Autowired
    private CalculationService calculationService;

    @Test
    public void calTest(){
        int num1 = 25;
        int num2 = 10;

        int result;
        for(CalculationType calculationType : CalculationType.values()){
             result = calculationService.calculate(calculationType, num1, num2);
             log.info("{}\tresult = {}",calculationType.name(), result);
        }
    }
}

결과


CalTest : PLUS	result = 35
CalTest : MINUS	result = 15
CalTest : MUL	result = 250
CalTest : DIV	result = 2

결론


자바 8이 릴리즈 된 지도 7년이라는 시간이 지났다. 항상 8버전으로 다운받고 막상 그 기능을 제대로 공부해 본 적도, 활용해 본 적도 거의 없었던 것 같다. (간단한 스트림정도?)😅
함수형 방식으로 프로그래밍을 할 경우 계산기 예제와 같이 확장성뿐만 아니라 높은 추상화, 불변성 등의 장점을 취할 수 있으니, 그저 익숙하지 않은거라고, 어렵다고, 회사에서 당장 사용하지 않는다고 미루지 말고 차근차근 공부해 나갈 예정이다.!😆

profile
Awesome Dev!
post-custom-banner

0개의 댓글