해결된 질문
작성
·
507
6
답변 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" 라는 키워드로 검색해 보시고, 몇 가지 코드를 따라서 실습해보시면, 리플렉션이라는 기술이 어떤 느낌인지 확 와닿으실 거에요~
답변이 도움이 되었으면 좋겠습니다!!
또 궁금한 점 있으시면 편하게 질문 주세요~ 감사합니다! 🙏 🙏
친절한 답변 감사드립니다 🫡 정말 재밌게 강의 듣고있어요 😀