@RestController
@RequestMapping("/api")
public class CalculatorController {
}
우선 컨트롤러를 생성한 후, @RestController와 @RequestMapping을 추가했다.
세 가지 계산결과를 반환해야 하므로 domain에 Calculator을 추가했다.
public class Calculator {
private int add;
private int minus;
private int multiply;
public int getAdd() {
return add;
}
public int getMinus() {
return minus;
}
public int getMultiply() {
return multiply;
}
public Calculator(int add, int minus, int multiply) {
this.add = add;
this.minus = minus;
this.multiply = multiply;
}
}
컨트롤러에서 바로 받아온 파라미터 값을 계산하여 넘겨도 되지만, 역할 분리를 위해 service로 분리하기로 했다.
추후 로직 변경이 있는 경우에는 service에서만 수정하면 된다.
@Service
public class CalculatorService {
public Calculator calc(int num1, int num2){
Calculator calc = new Calculator(add(num1, num2),minus(num1, num2),multiply(num1, num2));
return calc;
}
public int add(int num1, int num2){
return num1+num2;
}
public int minus(int num1, int num2){
return num1-num2;
}
public int multiply(int num1, int num2){
return num1*num2;
}
}
<aside> ❓ 현재 CalculatorService 내의 비즈니스 로직 구현 함수는 해당 클래스에서만 이용한다. 그렇다면 private로 구현하는 것이 더 이상적이지 않을까?
</aside>
다시 컨트롤러로 돌아와서, CalculatorService를 주입한 후 GetMapping을 개발한다.
@RestController
@RequestMapping("/api")
public class CalculatorController {
/**
* 문제 1
* path: /api/v1/calc
* 파라미터: num1,num2
*/
private final CalculatorService calculatorService;
public CalculatorController(CalculatorService calculatorService) {
this.calculatorService = calculatorService;
}
@GetMapping("/v1/calc")
public Calculator calc(int num1, int num2){
return calculatorService.calc(num1,num2);
}
}