DTO 관련
66
投稿した質問数 25
안녕하세요 BookCreateRequest 객체에 name 을받는 생성자를 만들었더니 아무것도 안받는 생성자도 만들어야 정상 작동하더라구요 근데 아예 생성자를 안만드니까 바로 정상 작동하던데 무슨 차이가 있는건가요?
回答 2
0
안녕하세요! eovnfjfpa님~ 🙂 크~ 많이 물어보시는 질문인데요!
살짝 복잡한 내용일 수 있지만, 스프링은 들어오는 문자열 (HTTP Body에 들어 있는 json 이죠!) 을 객체로 변환하는 과정에서 객체의 생성자를 필요로 합니다!
그리고 어떤 생성자가 필요한지는 스프링 버전에 따라, 객체 필드 수에 따라 조금씩 다르더라고요... 😅
때문에 개인적으로는 기본 생성자 (= 아무것도 받지 않는 생성자) 를 항상 넣어주는 편입니다. lombok을 사용할 경우 @NoArgsConstructor 를 항상 붙이는 것이죠~
자바 17이 넘어가게 되면서는 record class가 등장해 record 클래스를 사용하면 조금 더 쉽게 대응이 되는 편입니다. 또 궁금한 점 생기시면 언제든 편하게 질문 주세요~ 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. eovnfjfpa님.
DTO(Data Transfer Object) 클래스를 설계할 때 생성자를 사용하는 방법에 대해 질문 주셨군요. 이는 스프링과 같은 프레임워크에서 객체를 생성하고 관리하는 방식과 관련이 있습니다.
빈 생성자(no-args constructor):
- 스프링은 JSON 데이터를 객체로 역직렬화(deserialization) 할 때, 리플렉션을 이용해 객체를 생성합니다. 이 과정에서 기본적으로 빈 생성자가 필요합니다. 빈 생성자가 있으면 스프링은 객체 생성 후 setter 메서드를 통해 각 필드를 초기화합니다.
- 스프링은 JSON 데이터를 객체로 역직렬화(deserialization) 할 때, 리플렉션을 이용해 객체를 생성합니다. 이 과정에서 기본적으로 빈 생성자가 필요합니다. 빈 생성자가 있으면 스프링은 객체 생성 후 setter 메서드를 통해 각 필드를 초기화합니다.
매개변수 있는 생성자:
- 특정 필드를 초기화할 때 사용하는 생성자입니다. 이를 사용하면 생성 시점에 값을 설정할 수 있어 편리하지만, 스프링이 자동으로 제공하는 기본 역직렬화 과정과 충돌할 수 있습니다.
- 특정 필드를 초기화할 때 사용하는 생성자입니다. 이를 사용하면 생성 시점에 값을 설정할 수 있어 편리하지만, 스프링이 자동으로 제공하는 기본 역직렬화 과정과 충돌할 수 있습니다.
리플렉션 사용:
- 자바 리플렉션은 클래스의 런타임 시점에서 정보를 조회하고, 인스턴스를 생성할 수 있는 기능을 제공합니다. 스프링은 주로 리플렉션을 사용해 객체를 다루기 때문에 빈 생성자가 없더라도 동작할 수 있지만, 빈 생성자가 없는 경우 특정 조건에서 문제가 발생할 수 있습니다.
- 자바 리플렉션은 클래스의 런타임 시점에서 정보를 조회하고, 인스턴스를 생성할 수 있는 기능을 제공합니다. 스프링은 주로 리플렉션을 사용해 객체를 다루기 때문에 빈 생성자가 없더라도 동작할 수 있지만, 빈 생성자가 없는 경우 특정 조건에서 문제가 발생할 수 있습니다.
따라서, 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

