작성
·
42
0
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
14:26을 보시면, createOrderItem에서 모든 필드에 대해 세터를 호출하여 일일히 값을 주입합니다.
다양한 파라미터를 사용하는 경우의 수에 대해 각각 생성자를 선언해두면
가독성이 상승하여 추후 유지보수에도 더 편리할것 같은데, 이렇게 사용하는 이유가 있나요?
스프링 강의만 수강하고 야생형 코스를 막 시작한 입장에서,
제가 기억하는 생성자 관련 원칙은 다음과 같습니다.
아무 생성자도 없다면 기본 생성자가 생성된다.
JPA는 리플렉션을 통해 코드를 생성하기에 기본 생성자는 반드시 필요하므로, 필요하면 명시하여 생성한다.
DI를 위해서 @RequiredArgsConstructor를 이용하여 final 필드를 사용하는 생성자를 생성하고, 주입받는 방식을 권장한다.
생성자는 최소화하라는 다른 원칙이 존재하는 것인가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. JongYun Won님. 질문 주신 “생성자 대신 세터를 사용하는 이유”에 대해 설명드리겠습니다.
스프링과 JPA 환경에서 생성자를 설계할 때는 몇 가지 고려사항이 있습니다.
기본 생성자의 필요성: JPA는 엔티티를 프록시를 통해 관리하며, 리플렉션을 사용해 객체를 생성할 때 기본 생성자가 필요합니다. 따라서 별도로 생성자를 정의하지 않으면, JPA는 기본 생성자를 필요로 하게 됩니다.
Setter 사용의 이유:
setOrderPrice
)을 통해 알 수 있습니다.컨스트럭터와의 조합:
final
필드 위주로 생성자를 생성하게 하여 DI 주입 시 유용합니다. 그러나 비즈니스 로직이나 객체 변환 로직에서 필요한 경우에는 불변 객체를 유지하기 위해 final
을 사용하는 것이 더 안정적일 수 있습니다.유지보수성: 여러 개의 생성자를 관리하는 것은 자칫 잘못된 사용으로 객체의 불변성을 해칠 수 있으며, 코드의 가독성을 떨어뜨릴 수 있습니다. setter를 통해 관리하면, 필요한 부분에 따라 분리되고 명확하게 각 단계에서 데이터를 설정할 수 있어 유지보수가 더 수월합니다.
추천 자료:
- OrderItem을 생성할 때 생성자와 Builder 패턴을 사용하는 이유
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.