블로그

준섭

인프런 워밍업 클럽 스터디 1기 BE 3번째 과제

람다 표현식이란?람다 표현식 줄여서 람다식이란 메서드를 간결한 함수식으로 표현한 것이다.그리고 함수형 프로그래밍을 구성하기 위한 함수식이라고 하는데람다식이 나오게 된 이유는 객체 지향 프로그래밍 언어인 자바에서함수형 프로그래밍을 사용하기 위해서 Java 8버전 부터 추가되었다.자바에서 메서드를 사용하려면 클래스를 정의하고 메서드를 작성해야 하지만람다식으로 표현하면 메서드의 이름과 반환타입을 생략할 수 있다.int add(int x, int y) { return x + y; } // 람다식으로 표현 // 메서드명과 반환타입 생략 가능 (int x, int y) -> { return x + y; } // 매개변수 타입도 생략 가능 (x, y) -> x + y; 람다식과 익명 클래스어떻게 클래스를 만들지 않고 메서드를 작성할 수 있는 걸까?자바에는 이름이 없는 클래스인 익명 클래스가 있는데익명 클래스는 클래스를 따로 정의하지 않고 바로 객체로 생성해 한번만 사용할 수 있다.이 익명 클래스를 짧게 표현하면 람다식이 되는 것이다.interface Add { int add(int x, int y); } // 익명 클래스 Add a = new Add() { public int add(int x, int y) { return x + y; } }; // 람다식 Add a = (x, y) -> {return x + y;}; 여기서 익명 클래스와 람다식을 대입 받는 변수가 필요한데이 변수는 인터페이스를 사용해야 하고이 인터페이스를 함수형 인터페이스라고 한다.함수형 인터페이스(functional interface)단 하나의 추상 메서드가 선언된 인터페이스를 함수형 인터페이스라고 한다.그리고 람다식은 함수형 인터페이스의 추상 메서드의 구현 부분을 짧게 표현한 것이 함수형 인터페이스의 추상 메서드를 통해서 타입을 추론할 수 있기 때문에 타입의 생략이 가능하다.@FunctionalInterface이 어노테이션을 인터페이스에 붙여주면 두 개 이상의 추상 메서드가 선언되지 않도록 컴파일러가 체크해줘서 실수를 줄일 수 있다.  참고https://inpa.tistory.com/entry/%E2%98%95-Lambda-Expression#

백엔드

한국취업센터

[호남권] ICT이노베이션스퀘어 온라인 코딩스터디 백엔드+인공지능 부트캠프 교육생 모집

 *호남권(전남/전북/광주 등 호남권 모두) 거주자 및 소재 대학생 모두 참여 가능합니다.   ○ 행사(교육)소개   - 안녕하세요.     한국취업센터입니다.     2024년도 전남ICT이노베이션스퀘어 백엔드 및 인공지능 부트캠프     참여자 모집 공고를 아래와 같이 안내 드리오니, 많은 참여바랍니다.     ※ 100% 온라인 무료교육 및 자격증 응시     비용이 지원 되기에 많은 지원 바랍니다.   ○ 기간 및 일정   - 교육명: 전남ICT 이노베이션스퀘어 부트캠프 [백엔드, 인공지능 전문교육]   - 모집인원: 20명 (39세 미만 참여 가능)   - 모집기간: 2024. 05. 01(월) ~ 05. 10(화) 까지   - 모집대상: 호남권(전남/전북/광주) 거주자 및 소재 대학생들     (주민등록등본 표기 기준)   - 수료기준 : 교육 전체 시수의 70% 수강 or 50% 수강 후     취업하시면 수료로 인정됨   - 교육기간: 2024. 05 ~ 10. 23(수) / 콘텐츠 수강 자율,     실시간 화상교육 화목금 오후7시~오후10시 등   - 진행방식: 100% 온라인으로 실시   - 교육내용: 웹기초 및 자바 프로그래밍, 스프링 프레임워크,      파이썬 프로그래밍, 데이터 분석 시각화, 머 신러닝 모델 학습 등 자세한 내용○ 참가자격   - 호남권(전남/전북/광주) 거주자 및 소재 대학생들     (주민등록등본 표기 기준)○ 접수방법   - [ 바로가기 ] 해당 신청페이지 링크를 접속한다.   - 접속한 사이트 하단에 지금 "바로 부트캠프 지원하기" 버튼을 클릭   - 간단한 설문과 함께 교육 신청 진행   - 신청 완료 후에 원활한 등록처리를 위하여     오픈카톡 문의처( https://open.kakao.com/o/shk0R9hg )나     메일( info@k-jobc.co.kr )로      꼭 본인 성함과 연락처를 기재하여 회신바랍니다.○ 혜택내역   - 교육비 전액 무료   - 자격증 응시 비용 지원   - 전문 수료증 제공 등   - 교육 수료 후, 6개월 간 취업서비스 및 기업연계 실시     (사후관리 시스템)○ 문의   - 오픈카톡 문의 : https://open.kakao.com/o/shk0R9hg   - 운영본부 [ Tel. 02-6956-5981, 02-6956-5980 ]   - 메일 문의 [ info@k-jobc.co.kr ]   - 홈페이지 [ 한국취업센터 (k-jobc.co.kr) ]

웹 개발개발국비교육무료온라인전남광주전북백엔드인공지능

xicodey

[인프런 워밍업 클럽 1기] BE 3일차 과제

자바의 람다식은 왜 등장했을까? 자바는 람다식 함수형 프로그램밍이 사용한 이유는 불필요한 코드를 줄이고, 가독성을 높이기 위해서다 .그리고 함수 만드는 과정없이 한번에 처리 할 수 있기 때문에 생산성이 높아진다.병령 프로그램밍에 용이하다. 람다식과 익명 클래스는 어떤 관계가 있을까? 함수형 프로그래밍이란 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법이다.데이터 처리부는 데이터만 가지고 있을 뿐, 처리 방법이 정해져 있지 않아 외부에서 제공져 있지 않아 외부에서 제공된 함수에 의존한다.데이터 처리부는 제공된 함수의 입력값으로 데이터를 넣어 함수에 정의된 처리 내용을 실행하고, 동일한 데이터라도 함수 A를 제공한 결과 값과 함수 B를 제공하여 처리된 결과 값은 다를 수 있다 이것이 함수형 프로그램의 특징인 데이터 처이의 다형성이다.람다식은 함수를 하나의 식으로 표현하여 익명 함수를 반환한다.익명 클래스는 선언된 클래스 내에서만 한 번만사용될 경우 별도로 변수에 담을 필요가 없다.람다식을 쓰면 함수형 인터페이스로 인스턴스를 만들 수 있으며 코드를 줄 일 수 있다.메서드 매개변수와 리턴 타입, ㅌ변수로 만들어 사용도 가능하다. 람다식의 문법은 어떻게 될까? 데이터 처리부에 제공되는 함수 역활 하는 매개변수를 가진 중괄호 블록이다.{매개변수, ...} -> {처리 내용};  인터페이스가 단 하나의 추상 메소드를 가질 경우 이를 함수형 인터페이스라고 한다.public interface Runnable { void run(); }람다식() -> { ...}; @FunctionalInterface public interface Calculable { void calculate(int x, int y); }람다식(x, y ) -> { ...}@FunctionalInterface 어노테이션을 사용한 이유는 인터페이스가 함수형 인터페이스를 보장하기 위해서다.붙이는 것은 선택사항이지만, 컴파일 과정에서 추상 메소드가 하나인 검사하기 때문에 정확한 함수형 인터페이스를 작성하게 도와주는 역활을 해준다.매 매개변수가 없는 람다식실행문이 하나일 경우 중괄호를 생략 가능하고 두개 이상일 경우는 생략할 수 없다.() -> 실행문; () -> { 실행문; 실행문; } 매개변수가 있는 람다식매개변수를 선언할 때 타입은 생략할 수 있고, 구체적인 타입 대신에 var를 사용할 수 있다.(타입, 매변수, ... ) -> { 실행문; 실행문; }(타입, 매변수, ... ) -> 실행문;(var 매개변수, ...) -> { 실행문; 실행문; }(var 매개변수, ...) -> 실행문;(매개변수, ...) -> { 실행문; 실행문; }(매개변수, ...) ->실행문;매개변수 -> { 실행문; 실행문 };매개변수 -> 실행문; 리턴값이 있는 람다식return 문 하나만 있는 경우에는 중괄호와 함께 return 키워드를 생략가능하다.(매개변수, ...) -> { 실행문; return 값 )(매개변수, ...) -> 값 메소드 참조메소드를 참조하여 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수를 제거한다. (left, right) -> Math.max(left, right);Math.max() 메소드의 매개값은 전달하는 역활만 하기 때문에 다음과 같이 생략이 가능하다.Math :: max;정적 메소드를 참조할 경우에는 클래스 이름 뒤에 :: 기호를 붙이고 메소드 이름을 기술한다.클래스 :: 메서드참조변수 :: 메소드 매개변수의 메소드 참조(a, b) -> {a.instaceMethod(b);}메소드 참조는 a 클래스 이름 뒤에 :: 기호를 붙이고 매소드 이름을 기술한다.작성 방법은 메소드 참조와 동일하지만, a의 인스턴스 메소드가 사용된다는 점이 다르다.클래스 :: instaceMethod Reference이것은 자바다(책)

인프런워밍업클럽스터디1기백엔드

xicodey

[인프런 워밍업 스터디 클럽] 1기 백엔드 2일차 과제

어노테이션 사용하는 이유어노테이션은 사용 용도로 3가지가 있습니다.1. 컴파일 시 사용하는 정보 전달2. 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달3.실행 시 특정 기능을 처리할 때 사용하는 정보 전달컴파일 시 사용하는 정보 전달의 대표적인 예는 @Override 어노테이션입니다.컴파일러가 메소드 재정의 검사를하도록 설정합니다. 재정의되지 않았다면 컴파일러는 에러를 발생시킵니다.웹 개발에 많이 사용하는 Spring Framework 또는 Spring Boot는 다양한 종류의 어노테이션을 사용해서 웹 애플리케이션을 설정하는데 사용합니다.나만의 어노테이션은 어떻게 만들 수 있을까? 어노테이션을 정의하는 방법은 인터페이스를 정의하는것과 유사합니다.@interface 뒤에 사용할 어노테이션을 이름을 정의합니다.오노테이션은 속성을 가질 수 있으며, 속성은 타입과 이름으로 구성됩니다. 속성은 기본값 default 키워드로 지정할 수 있습니다.어떤 대상에 설정 정보를 적용할 것인지, 적용대상을 정의 해야 합니다.클래스 명위에 @Target 어노테이션을 붙어 정의 합니다.적용할 수 있는 대상의 종류는 ElememtType 열거 상수로 정의되어 있습니다.TYPE : 클래스, 인터페이스 열거타입ANOTATION_TYPE: 어노테이션FIELD: 필드CONSTERUCTOR: 생성자METHOD: 메서드LOCAL_VARIABLE: 로컬 변수 예시어노테이션 정의@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface PrintAnnotation { String value() default "-"; int number() default 15; } 서비스 어노테이션 적용public class Service { @PrintAnnotation public void method1() { System.out.println("실행 내용1"); } @PrintAnnotation("*") public void method2() { System.out.println("실행 내용2"); } @PrintAnnotation(value = "#", number = 20) public void method3() { System.out.println("실행 내용3"); } } 실행 코드public class PrintAnnotationExample { public static void main(String[] args) throws InvocationTargetException, IllegalAccessException { Method[] declaredMethods = Service.class.getDeclaredMethods(); for (Method method : declaredMethods) { PrintAnnotation printAnnotation = method.getAnnotation(PrintAnnotation.class); printList(printAnnotation); method.invoke(new Service()); printList(printAnnotation); } } public static void printList(PrintAnnotation printAnnotation) { if (printAnnotation != null) { int number = printAnnotation.number(); for (int i = 0; i < number; i++) { String value = printAnnotation.value(); System.out.print(value); } System.out.println(); } } } 출력 내용

인프런워밍업클럽스터디1기백엔드

xicodey

[인프런 워밍업 스터디 클럽] 1기 백엔드

문제 1두 수를 입력하면, 다음과 같은 결과가 나오는 GET API만들기@GetMapping("api/v1/calc") public ResponseEntity<?> calc(Calculator request){ CalculatorResponse response = calculatorService.calc(request); return ResponseEntity.ok(response); }CalculatorController에 Post 요청 메서드로 외부 파라미터를 받기 위해 응답 객체로 Calculator 를 정의했습니다. @Getter @AllArgsConstructor public class Calculator { private final int num1; private final int num2; } calulatorService 정의하여 비지니스 로직을 작성했습니다.@Service public class CalculatorService { public CalculatorResponse calc(Calculator request) { return new CalculatorResponse( add(request), minus(request), multiply(request)); } private static int add(Calculator request) { return request.getNum1() + request.getNum2(); } private static int minus(Calculator request) { return request.getNum1() - request.getNum2(); } private static int multiply(Calculator request) { return request.getNum1() * request.getNum2(); } }응답용 객체로 CalculatorResponse를 정의를 했습니다.@Data @NoArgsConstructor @AllArgsConstructor public class CalculatorResponse { private int add; private int minus; private int multiply; }그리하여 calulatorService에 요청 받은 두 데이터를 처리하여 CalculatorResponse로 ResponseEntity에 담아 200 응답으로 JSON 반환값으로 보냅니다.문제 2날짜를 입력하면, 몇 요일인지 알려주는 GET API 만들기@RestController @RequestMapping("/api/v1") public class DateController { @GetMapping("/getDayOfWeek") public ResponseEntity<?> getDayOfWeek(@RequestParam String date) { try { LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); String dayOfTheWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.ENGLISH).toUpperCase(); return ResponseEntity.ok(Collections.singletonMap("dayOfTheWeek", dayOfTheWeek)); } catch (DateTimeException e) { return ResponseEntity.badRequest().body("Invalid date format"); } } }클라이언트 요청을 처리하고 응답을 반환하기 위해 @RestController 어노테이션을 씁니다.@GetMapping("/getDayOfWeek") 어노테이션을 써서 GET 요청이 오면 메소드가 호출됩니다.@RequestParam을 써서 date 파리미터를 받습니다.받은 날짜 문자열을 'LocalDate' 객체로 반환하기 위해 'DateTimeForrmatter'를 사용하여 날짜 형식을 지정합니다. 그리고 LocalDate 객체의 getDayofWeek() 메서드를 사용하여 요일을 구할 수 있습니다.마지막으로 JSON 형식으로 반환하기 위해 Collections.singletonMap을 사용하여 간단하게 키-값 쌍을 만들어 JSON형식으로 반환할 수 있습니다.문제3여러 수를 받아 총 합을 반환하는 POST API 만들기 @Data public class CalculatorRequest { private List<Integer> numbers; }클라이언트로 부터 받기 위해 숫자 배열릉 받기 위해 List<Integer> 필드를 가진 클래스를 만듭니다. @PostMapping("/sum") public int calculateSum(@RequestBody CalculatorRequest request) { return request.getNumbers().stream() .mapToInt(Integer::intValue) .sum(); }CalculatorController에 Post요청을 처리하기 위해 @PostMapping 어노테이션을 사용합니다.@@RequestBody를 사용하여 JSON 데이터를 CalculatorRequest 객체로 변환됩니다.stream을 돌려 합계를 계산한 다음, 그 결과를 반환합니다.

인프런워밍업클럽스터디1기백엔드

JH_DEV77

[인프런 워밍업 클럽 1기] 1주차 발자국

1주차(Day1 ~ Day3) 학습 내용 요약이번주차는 여행일정이 있어 계획한 5일치는 끝내지 못했다. Day1은 강의를 듣기 위한 기본 세팅과 기본적인 네트워크 지식에 대해 배우게된다. 본격적으로 코드를 만지기전 사전 작업이다. 그래서 코드만 만지면 모를 수 있는 기반 지식을 쉽게 설명해주고 있다. 키워드로 정리하고 블로그에 남길 내용은 링크 남기도록 하자. 라이브러리, 프레임워크의 개념과 차이인터넷의 역할 , 인터넷의 규약인 HTTP 요청 분석 , 데이터를 보내는 대표적인 두가지 방법(쿼리와 바디)URLHTTP 응답과 상태코드 Day2는 기반 지식을 통해 HTTP API를 개발해본다. GET, POST 등 기본 API를 개발한다.API를 개발전 사전 정의해야될 내용들 - API 명세 (Spec)GETPOSTDay3는 프로젝트에 필요한 DB 기초지식을 학습한다. 기본적인 내용이라 따라 정리할 필요 없었다.  1주차 회고1주차는 개인 일정때문에 시간이 많아 당초 계획한 일정보단 적게 진행하였다. 이번 강의들은 대부분 알고 있는 내용이라 리와인드하는 느낌으로 진행하였다. 그렇다보니 개발 파트보단 사전 네트워크에 대한 부분에서 많은 공부 키워드들을 얻을 수 있었고 기존에 블로그에 정의한 내용이었으면 다시 학습히고 없는 내용이면 포스팅하면서 정리할 수 있었다.개인적으로 책같은걸 잘 못읽어 쉬운 내용도 잘 이해 못하는 경우가 있는데 강의는 매우 쉽게 설명해준다고 느껴졌다.마지막으로 1주차의 마음가짐을 잊지않고 완주를 목적으로 달리도록 하자.  1주차 미션(1,2,3 진행)첫번째 미션은 어노테이션의 역할을 정리하였다. 사실 어노테이션은 많이 사용하니깐 대략적으로 어떤 것인지는 알고 있었다. 하지만 막상 나한테 질문한다면 명확하게 말을 못할 것이다. 이번 과제를 통해 어노테이션의 역할을 숙지 할 수 있었다.추가적으로 리플랙션이라는 단어가 지속적으로 언급되는데 그것을 한번 정리해보는 시간을 가지면 좋을 것 같다.https://jh7722.tistory.com/81 두번쨰 미션은 3가지 API 명세를 제공해주고 그것을 실제 구현해보는 과정이다. 어렵지 않아서 쉽게 접근이 가능하였으며 아무래도 DTO 활용과 HTTP 메서드 별 요청 데이터를 전달하는 방식, POSTMAN 같은 API 호촐 프로그램 활용법 등을 익히는데 중점이 있었다.https://jh7722.tistory.com/84 세번쨰 미션는 진행중!!

백엔드워밍업클럽인프런

개발자 경제신문 읽기 13일차

 마크롱 "한국 무기 구매 자제"... K방산 견제 나선 유럽프랑스 대통령 "미국과 한국 무기 대신 유럽산 무기를 사자" 고 주장, 영국 자주포 도입 사업에서 독일 무기 채택현재 약 20%인 EU 역내 무기 구입 비중을 2035년까지 60%로 올리는 목표 제시노르웨이 전차 사업 선정 : 독일 회사로 결정. "노르웨이 천연가스를 독일에 파는 중이라 외교 고려"영국 자주포 사업 선정 : 독일 회사로 결정. 현재 영구은 EU와 협력해야 함.결국, 외교와 국제 관계 정세로 결정되는 것이므로 외교를 잘해야한다  트럼프 "한국은 부유한 나라, 왜 지켜주나"한국 방위비 부담에 적극적인 동참을 하지 않으면 주한미군을 철수할 것이라고 함현재 분담금은 1조 1833억원근데 솔직히 이제 "우리 돈 없어요" 포지션보다 미국과의 방위협력으로 중국-대만 전쟁 시에 나설 수 있는 협력국 지위를 가져야한다고 생각함  국민 60%, "1억 지원금, 출산 동기될 것"'정부가 출산한 산모에게 파격적인 현금을 지원해준다면 아이를 적극적으로 낳게 하는 동기 부여가 되겠느냐'는 질문에 62.6%가 된다고 답했다.'산모, 출생아에게 현금 지급 시 국가는 23년 출생아 수 기준 약 23조원을 부담할 것으로 예상, 재정투입에 동의?' 63.4% 가 동의로 응답근데 이거 설문조사 잘못된 것 같음. 아이를 낳는 건 여성인데 1번 질문은 여성에게만 하고 나머지 질문을 모두에게 해야하는거 아님? 중국 '20만 로봇 대군'의 선전포고... "휴머노이드에선 미국 이기겠다"'독일의 실수'가 키운 중국 로봇 산업 세계 2위 '쿠카' 인수 후 폭풍성장중국 가전업체 메이디, '쿠카' 인수 - 독일은 중국을 '제 2 내수시장'으로 여기던 시절전기차 분야 성공 방정식을 AI 휴머노이드 분야에서도 적용, "보조금, 정부지원으로 산업 부양한 뒤, 경쟁하도록 함"산업, 가정용 로봇이 보급되면 중국은 엄청난 데이터를 축적하게 될 것 알테쉬 공습에 중국 직구 사상 최대온라인 해외 직구액은 1조 6476억원(작년 동기 대비 9.4% 상승)중국이 차지하는 비율이 40.5% -> 57.0 % 로 급증 미국, 집값 임금 다 뛰었다... "Fed, 금리인하 논의 무기한 중단"미국의 임금, 주택가격 등 물가 지표 상승폭 가팔라짐. 금리 인하 논의 무기한 중단 - 금리를 낮춰서 돈이 풀리면 더 올라갈 것이므로? 

교양신문읽기

김동찬

인프런 워밍업 클럽 1기 백엔드 과정 두 번째 과제!

과제2: API 개발 실습1. 두 수의 연산 결과 반환API/컨트롤러 @RestController public class PracticeController { @GetMapping("/api/v1/calc") public CalculateResponse getCaluclateResult(@RequestParam int num1, @RequestParam int num2) { CalculateResponse response = new CalculateResponse(num1,num2); return response; } } /DTO 클래스 public class CalculateResponse { private int add; private int minus; private int multiply; public CalculateResponse(num1,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; } }2. 요일 반환 API//컨트롤러 package com.group.libraryapp.controller.date; import com.group.libraryapp.dto.date.response.DateResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.time.format.TextStyle; import java.util.Date; import java.util.Locale; @RestController public class DateController { @GetMapping("v1/day") public DateResponse getToday(@RequestParam String date) { LocalDate day = LocalDate.of(date); return new DateResponse(day.getDisplayName(TextStyle.SHORT, Locale.US)); } } // Dto package com.group.libraryapp.dto.date.response; public class DateResponse { private String dayOfTheWeek; public DateResponse(String dayOfTheWeek) { this.dayOfTheWeek = dayOfTheWeek; } public String getDayOfTheWeek() { return dayOfTheWeek; } }3.입력한 수들의 합 반환//컨트롤러 @RestController public class PracticeController { @PostMapping("/api/v1/sum") public Integer sumNumbers(@RequestBody SumRequest request) { int sum = 0; for (Integer number : request.getNumbers()) { sum += number; } return sum; } } //DTO public class SumRequest { private List<Integer> numbers = new ArrayList<>(); public List<Integer> getNumbers() { return numbers; } }  참고블로그: https://hianna.tistory.com/610   

백엔드

수희

[워밍업클럽] BE 1기 #과제2

문제 1두 수를 입력하면, 다음과 같은 결과가 나오는 GET API를 만들어 보자!path : /api/v1/calc쿼리 파라미터 : num1, num2   { "add": 덧셈결과, "minus": 뺄셈결과, "multiply": 곱셈결과 } [예시] GET /api/v1/calc?num1=10&num2=5{ "add": 15, "minus": 5, "multiply": 50 } 풀이 >@RestController public class CalculatorController { @GetMapping("/api/v1/calc") public CalculatorAddMinusMultiplyResponse calculateTwoNumbers( @RequestParam int num1, @RequestParam int num2 ){ return new CalculatorAddMinusMultiplyResponse(num1 + num2, num1 - num2, num1 * num2); } } num1, num2 두 수를 @RequestParam 으로 쿼리 값으로 받아 덧셈, 뺄셈, 곱셈 3가지 연산 결과 값을 CalculatorAddMinusMultiplyResponse생성자의 매개변수로 전달하여 CalculatorAddMinusMultiplyResponse형태로 결과를 반환받으며, public class CalculatorAddMinusMultiplyResponse { private final int add, minus, multiply; public CalculatorAddMinusMultiplyResponse(int add, int minus, int multiply) { this.add = add; this.minus = minus; this.multiply = multiply; } public int getAdd() { return add; } public int getMinus() { return minus; } public int getMultiply() { return multiply; } } CalculatorAddMinusMultiplyResponse는 [예시]와 같은 형식으로 만들기 위해 구현하였다.  문제 2날짜를 입력하면, 몇 요일인지 알려주는 GET API를 만들어 보자! path와 쿼리 파라미터는 임의로 만들어도 상관없다.[예시] GET /api/v1/day-of-the-week?day=2023-01-01{ "dayOfTheWeek": "MON" } 풀이 >@RestController public class DateController { @GetMapping("/api/v1/day-of-the-week") public DayOfWeekResponse dayOfWeek(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate day){ return new DayOfWeekResponse(day.getDayOfWeek().toString().substring(0,3)); } }쿼리값으로 LocalDateday를 받은 후 day에 해당하는 요일을 string으로 변환한 후 해당 문자열의 0번인덱스부터 2번까지 자른 값을 반환한다.public class DayOfWeekResponse { String dayOfTheWeek; public DayOfWeekResponse(String dayOfWeek) { this.dayOfTheWeek = dayOfWeek; } public String getDayOfTheWeek() { return dayOfTheWeek; } }DayOfWeekResponse는 [예시]와 같은 형식으로 만들기 위해 구현하였다. 문제 3여러 수를 받아 총 합을 반환하는 POST API를 만들어 보자! API에서 받는 Body는 다음과 같은 형태이다. ( HINT: 요청을 받는 DTO에서 List를 갖고 있으면 JSON의 배열을 받을 수 있습니다){ "numbers": [1, 2, 3, 4, 5] }반환결과 🛑주의! 반환결과는 JSON이 아니다!15풀이 >public class AddNumberRequest { List<Integer>numbers = new ArrayList<>(); public AddNumberRequest(){} public AddNumberRequest(List<Integer>numbers){ this.numbers = numbers; } public List<Integer> getNumbers() { return numbers; } }JSON 배열을 받기 위해 AddNumberRequest에 List<Integer>numbers를 구현하였다.@RestController public class NumberController { @PostMapping("/api/v1/add") public int addNumbers(@RequestBody AddNumberRequest request){ int sum = 0; for (int i : request.getNumbers()){ sum += i; } return sum; } }AddNumberRequest구현시 에러가 발생하였고, 기본생성자 코드를 추가하여 해결하였다. 이유를 찾아보니 NumberController에서 받은 AddNumberRequest요청을 java객체로 변경할때 역직렬화 과정이 수행되는데 그 과정에서 ObjectMapper는 @RequestBody를 통해 받은 AddNumberRequest의 기본생성자를 사용한다. 그렇기때문에 기본 생성자가 필요하다.강의- 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지], https://inf.run/XKQg출처https://dev-coco.tistory.com/31https://m.blog.naver.com/sosow0212/223077995727