inflearn logo
강의

講義

知識共有

JavaとSpring Bootで生涯初のサーバー作り、誰でも簡単に開発から配布まで! 【サーバー開発オールインワンパッケージ】

第30講。本作成APIの開発

DTO 관련

66

eovnfjfpa

投稿した質問数 25

0

안녕하세요 BookCreateRequest 객체에 name 을받는 생성자를 만들었더니 아무것도 안받는 생성자도 만들어야 정상 작동하더라구요 근데 아예 생성자를 안만드니까 바로 정상 작동하던데 무슨 차이가 있는건가요?

java spring aws mysql spring-boot jpa

回答 2

0

lannstark

안녕하세요! eovnfjfpa님~ 🙂 크~ 많이 물어보시는 질문인데요!

살짝 복잡한 내용일 수 있지만, 스프링은 들어오는 문자열 (HTTP Body에 들어 있는 json 이죠!) 을 객체로 변환하는 과정에서 객체의 생성자를 필요로 합니다!

그리고 어떤 생성자가 필요한지는 스프링 버전에 따라, 객체 필드 수에 따라 조금씩 다르더라고요... 😅

때문에 개인적으로는 기본 생성자 (= 아무것도 받지 않는 생성자) 를 항상 넣어주는 편입니다. lombok을 사용할 경우 @NoArgsConstructor 를 항상 붙이는 것이죠~

 

자바 17이 넘어가게 되면서는 record class가 등장해 record 클래스를 사용하면 조금 더 쉽게 대응이 되는 편입니다. 또 궁금한 점 생기시면 언제든 편하게 질문 주세요~ 감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. eovnfjfpa님.

DTO(Data Transfer Object) 클래스를 설계할 때 생성자를 사용하는 방법에 대해 질문 주셨군요. 이는 스프링과 같은 프레임워크에서 객체를 생성하고 관리하는 방식과 관련이 있습니다.

  1. 빈 생성자(no-args constructor):

    • 스프링은 JSON 데이터를 객체로 역직렬화(deserialization) 할 때, 리플렉션을 이용해 객체를 생성합니다. 이 과정에서 기본적으로 빈 생성자가 필요합니다. 빈 생성자가 있으면 스프링은 객체 생성 후 setter 메서드를 통해 각 필드를 초기화합니다.
  2. 매개변수 있는 생성자:

    • 특정 필드를 초기화할 때 사용하는 생성자입니다. 이를 사용하면 생성 시점에 값을 설정할 수 있어 편리하지만, 스프링이 자동으로 제공하는 기본 역직렬화 과정과 충돌할 수 있습니다.
  3. 리플렉션 사용:

    • 자바 리플렉션은 클래스의 런타임 시점에서 정보를 조회하고, 인스턴스를 생성할 수 있는 기능을 제공합니다. 스프링은 주로 리플렉션을 사용해 객체를 다루기 때문에 빈 생성자가 없더라도 동작할 수 있지만, 빈 생성자가 없는 경우 특정 조건에서 문제가 발생할 수 있습니다.

따라서, DTO 클래스 설계 시에는 빈 생성자를 명시적으로 제공해주면 예기치 않은 오류를 피할 수 있습니다. 관련해서 많은 개발자들이 기본 생성자를 추가하는 것을 권장하고 있습니다.

더 상세한 예시나 설명을 원하신다면, 아래와 같은 유사한 질문들을 참조하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

리액트 관련 질문이 있습니다.

0

60

2

스프링부트 버전

0

66

2

7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.

0

55

2

33강. UserLoanHistory의 관계성에 대한 질문

1

51

2

Java JDK 버전 문의의 건

0

126

2

ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.

0

81

3

h2 console 접속했을 테이블 질문

1

62

1

ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨

0

71

2

15강. updateUser() 질문

0

51

2

깃허브 질

0

77

2

여기까지 다 끝냈다고 하셨는데

0

75

2

왜안될까요

0

67

2

MySQL 창이안ㄴ뜹니다

0

53

2

포스트맨

0

46

1

spring 개념적인 질문

0

68

2

인텔리제이 샘플코드 실행 안됨 오류

0

138

2

aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다

0

81

1

마이그레이션 오류입니다.

0

165

3

Whitelabel Error Page 오류가 났습니다.

0

156

2

안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ

1

87

3

궁금한게 있습니다.

0

54

2

궁금한게 있습니다!

0

60

2

35강에서 returnBook 에서 userLoanHistory 값 중복에 관하여

0

54

2

질문있습니다!

2

51

1