inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tạo máy chủ đầu tiên của bạn bằng Java và Spring Boot Bất kỳ ai cũng có thể dễ dàng chuyển từ giai đoạn phát triển sang triển khai! [Gói phát triển máy chủ tất cả trong một]

Bài 30. Phát triển API tạo sách

DTO 관련

65

eovnfjfpa

25 câu hỏi đã được viết

0

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

java spring aws mysql spring-boot jpa

Câu trả lời 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

58

2

스프링부트 버전

0

64

2

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

0

52

2

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

1

50

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

153

2

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

1

85

3

궁금한게 있습니다.

0

53

2

궁금한게 있습니다!

0

59

2

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

0

51

2

질문있습니다!

2

48

1