[인프런 워밍업 클럽] 과제2

Jiwon·2024년 5월 1일
post-thumbnail

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

<문제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);
    }
  • num1num2를 dto로 받으려고 했는데 제시된 출력 결과처럼 나오지 않고 num1num2가 포함된 add, minus, multiply가 함께 출력되어서 @RequestParam을 이용했다.
  • dto 패키지의 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>

<실행 결과>

<해결 전략>

  • 문제1, 2와 마찬가지로 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);
        }

📚 JSON으로 List를 매핑하는 방법 참고

profile
écoute les murmures du cœur

0개의 댓글