자바 8 강의 중 람다 or 함수형 프로그래밍으로 확장성 있는 개발을 할 수 있다면서 간단한 예시로 계산기를 만들어서 보여주었다.
문득, 해당 함수를 enum
으로 만들어 재활용할 수 있게 만들어 놓고 사용하면 좋을 것 같아서 연습 겸 만들어본 계산기 ✒️
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;
}
}
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버전으로 다운받고 막상 그 기능을 제대로 공부해 본 적도, 활용해 본 적도 거의 없었던 것 같다. (간단한 스트림정도?)😅
함수형 방식으로 프로그래밍을 할 경우 계산기 예제와 같이 확장성
뿐만 아니라 높은 추상화
, 불변성
등의 장점을 취할 수 있으니, 그저 익숙하지 않은거라고, 어렵다고, 회사에서 당장 사용하지 않는다고 미루지 말고 차근차근 공부해 나갈 예정이다.!😆