어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)
안녕하세요 강사님먼저 첫번째 질문은 DTO (CalculatorMultiplyRequest request)를 매개변수로 받는 데, 자동으로 request 인스턴스가 생성되는 것이 이해가 가지 않습니다. 클래스는 생성자를 호출하기 위해서는 new키워드로 생성해야 하는 것으로 알고있는데, 이해가 잘 되지 않습니다.두번째 질문은 GET요청과는 다르게 POST요청은 Request 클래스 내부에 생성자 없이도 number1과 number2에 값이 할당되는 점입니다.어떻게 이게 가능할 수 있죠..?
답변 1
3
안녕하세요, mayo3610님! 정말 좋은 질문 감사드립니다~ 😊
질문 주신 내용에 대해 하나씩 답변 드려 볼게요!!!!
[1] DTO (CalculatorMultiplyRequest request)를 매개변수로 받는 데, 자동으로 request 인스턴스가 생성되는 것이 이해가 가지 않습니다
크으~~ 정말 좋은 질문입니다~ 👍
사실 Java 언어에서 우리가 어떤 객체를 받는 함수를 호출하려면, 말씀해주신 것처럼 new 연산자를 사용해 객체를 만든 후 함수를 호출할 때 넣어 주어야 하죠.
// 대략적인 느낌 입니다!
CalculatorMultiplyRequest request = new CalculatorMultiplyRequest(xxx, yyy);
controller.invoke(request);하지만 우리는 Controller 코드에 매개변수로 CalculatorMultiplyRequest 를 지정했을 뿐인데, API가 호출되면 자동으로 해당 객체의 인스턴가 생성되어 함수가 불리게 됩니다.
그 비밀은 바로 "스프링"에 있습니다. 우리가 프로그램을 개발할 때 "프레임워크"를 사용하는 이유이기도 한데요, "스프링" 내부에서 API 요청을 받으면 API의 URL은 무엇인지, HTTP Method는 무엇인지 확인해 적절한 Controller 클래스와, Controller 내부의 함수를 특정한 후 필요한 매개변수를 스프링이 직접 인스턴스화 하여 넣어주게 됩니다.
만약 스프링을 사용하지 않았다면, API 요청을 직접 받는 부분부터, HTTP 문법을 파싱하고, 우리의 로직과 연결하는 모든 코드를 직접 작성해야 했을 거에요!
한 줄 요약 드려보자면, "스프링이 해준다" 라고 보시면 되겠습니다.
관련해서 더 공부해보고 싶으시다면, "Spring MVC" 라는 키워드로 다양한 글을 읽어보시면 좋을 것 같습니다! 🙂
[2] 두번째 질문은 GET요청과는 다르게 POST요청은 Request 클래스 내부에 생성자 없이도 number1과 number2에 값이 할당되는 점입니다.어떻게 이게 가능할 수 있죠..?
이 역시 정말 좋은 질문입니다~ 👍 위의 답변에서, 인스턴스화를 스프링이 해준다고 하더라도 생성자를 만들지도 않았는데, 값이 정상적으로 들어 있는 인스턴스가 생기는 것이 이상하게 느껴질 수 있죠!!!
비밀은 자바의 "리플렉션" 이라는 기능에 있습니다. "리플렉션 (Reflection)" 이란 Java 코드가 실행중인 상황에서, 특정 클래스에 대한 정보를 가져와, 인스턴스를 만들거나, 필드의 목록을 불러오거나, 필드에 값을 넣어주는 등의 작업을 할 수 있는 기능을 말해요. 매개변수를 인스턴스화 하여 함수에 넣어주는 과정에서 리플렉션을 활용하면, private 변수에도 값을 직접 할당할 수가 있게 됩니다.
혹시나 더 궁금하시다면, "자바 리플렉션 API" 라는 키워드로 검색해 보시고, 몇 가지 코드를 따라서 실습해보시면, 리플렉션이라는 기술이 어떤 느낌인지 확 와닿으실 거에요~
답변이 도움이 되었으면 좋겠습니다!!
또 궁금한 점 있으시면 편하게 질문 주세요~ 감사합니다! 🙏 🙏
패키지 구분에 대해 궁금한게 있습니다
0
15
1
리액트 관련 질문이 있습니다.
0
63
2
스프링부트 버전
0
71
2
7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.
0
58
2
33강. UserLoanHistory의 관계성에 대한 질문
1
55
2
Java JDK 버전 문의의 건
0
132
2
ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.
0
86
3
h2 console 접속했을 테이블 질문
1
64
1
ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨
0
74
2
15강. updateUser() 질문
0
55
2
깃허브 질
0
81
2
여기까지 다 끝냈다고 하셨는데
0
78
2
왜안될까요
0
69
2
MySQL 창이안ㄴ뜹니다
0
58
2
포스트맨
0
49
1
spring 개념적인 질문
0
71
2
인텔리제이 샘플코드 실행 안됨 오류
0
139
2
aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다
0
82
1
마이그레이션 오류입니다.
0
169
3
Whitelabel Error Page 오류가 났습니다.
0
162
2
안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ
1
90
3
궁금한게 있습니다.
0
57
2
DTO 관련
0
69
2
궁금한게 있습니다!
0
65
2





