
📚 인프런 강의와 스터디를 바탕으로 한 과제를 풀이한 포스트입니다.
<문제1>

<실행 결과>
<해결 전략>
Calculator 패키지에서 해당 과제를 해결하는 API를 새로 만들었다.@GetMapping("/api/v1/calc") // GET /api/v1/calc
public Object calcThreeNumbers(@RequestParam int num1, @RequestParam int num2)
{
return new CalculatorThreeRequest(num1, num2);
}
num1과 num2를 dto로 받으려고 했는데 제시된 출력 결과처럼 나오지 않고 num1과 num2가 포함된 add, minus, multiply가 함께 출력되어서 @RequestParam을 이용했다.calculator 패키지 안에 문제 해결을 위한 새로운 자바 클래스 CalculatorThreeRequesT를 만들었다.package com.group.libraryapp.dto.calculator.request;
public class CalculatorThreeRequest {
private int add;
private int minus;
private int multiply;
public CalculatorThreeRequest(int num1, int num2) {
this.add = num1 + num2;
this.minus = num1 - num2;
this.multiply = num1 * num2;
}
public int getAdd() {
return add;
}
public int getMinus() {
return minus;
}
public int getMultiply() {
return multiply;
}
}
num1, num2를 이용해 계산한 결과를 반환한다.<문제2>

<실행 결과>
<해결 전략>
Calculator 패키지에서 해당 과제를 해결하는 API를 새로 만들었다.@GetMapping("/api/v1/day-of-the-week") // GET /api/v1/day-of-the-week
public CalculatorDayRequest calcDay(@RequestParam String date)
{
return new CalculatorDayRequest(date);
}
dto 패키지의 calculator 패키지 안에 문제 해결을 위한 새로운 자바 클래스 CalculatorDayRequest를 만들었다.
입력으로 'YYYY-MM-DD'를 받아 이를 처리하는 자바 클래스 CalculatorDayRequest에서의 멤버 변수인 dayOfTheWeek을 JSON으로 반환한다.
package com.group.libraryapp.dto.calculator.request;
import java.time.DayOfWeek;
import java.time.LocalDate;
public class CalculatorDayRequest {
private final DayOfWeek dayOfTheWeek;
public DayOfWeek getDayOfTheWeek() {
return dayOfTheWeek;
}
public CalculatorDayRequest(String date) {
LocalDate dateParse = LocalDate.parse(date);
this.dayOfTheWeek = dateParse.getDayOfWeek();
}
}
Postman으로 입력하는 value 값은 String이므로 요일을 나타내는 타입인 DayOfWeek로 변환해야 한다. 이때 사용되는 것이 LocalDate.parse()이다.
❗ LocalDate.parse(): String 타입을 LocalDate로 만든다.
LocalDate는 날짜 값을 읽는 여러 메소드를 제공한다.
❗ DayOfWeek dayOfTheWeek = dateParse.getDayOfWeek(): 요일 출력
<문제3>

<실행 결과>
<해결 전략>
CalculatorController로 내부에 @PostMapping("/sum") API를 작성했다.@PostMapping("/sum") // POST /sum
public int sumArrNumber(@RequestBody CalculatorSumRequest request)
{
int sum = 0;
for (int i = 0; i < request.getNumbers().size(); i++) {
sum += request.getNumbers().get(i);
}
return sum;
}
Postman에서 JSON으로 숫자로 구성된 리스트를 받아야 하는데, 어떻게 리스트의 합을 구할지 고민되었다. 힌트에서 언급된 DTO에서 List를 갖고 있으면 된다는 것을 이용해 보기로 했다.
dto 패키지의 calculator 패키지 안에 문제 해결을 위한 새로운 자바 클래스 CalculatorSumRequest를 만들었다.
package com.group.libraryapp.dto.calculator.request;
import java.util.*;
public class CalculatorSumRequest {
private List<Integer> numbers = new ArrayList<>();
public List<Integer> getNumbers() {
return numbers;
}
public CalculatorSumRequest() {
}
}
클래스 멤버 변수로 새로운 리스트를 만든다. (*이때 type은 <Integer>로 설정!) 자바 클래스에서는 JSON으로 요청한 리스트를 getNumbers()를 통해 list 객체로 반환해 주기만 하고, 리스트 안에 포함된 각 요소들은 CalculatorController에서 꺼내 쓴다.
숫자의 합을 계산하는 코드만 다시 살펴보자. request 요청 객체로 getNumbers()를 이용하면 @RequestBody로 입력한 것을 자바의 List로 다룰 수 있게 된다. .get(i)를 이용해 리스트의 각 요소를 꺼내고, for문을 돌면서 각각의 값을 int sum에 더해주고, sum을 출력하면 전체 리스트 합을 구할 수 있다.
for (int i = 0; i < request.getNumbers().size(); i++) {
sum += request.getNumbers().get(i);
}