1.

Untitled

@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);
    }

}