🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)

23.11.30 10:33 작성 조회수 395

6

스크린샷 2023-11-30 오전 10.28.53.png안녕하세요 강사님먼저 첫번째 질문은 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" 라는 키워드로 검색해 보시고, 몇 가지 코드를 따라서 실습해보시면, 리플렉션이라는 기술이 어떤 느낌인지 확 와닿으실 거에요~

 

답변이 도움이 되었으면 좋겠습니다!!

또 궁금한 점 있으시면 편하게 질문 주세요~ 감사합니다! 🙏 🙏

mayo3610님의 프로필

mayo3610

질문자

2023.12.02

친절한 답변 감사드립니다 🫡 정말 재밌게 강의 듣고있어요 😀

채널톡 아이콘