24.03.23 23:05 작성
·
175
0
컨트롤러(Api) 패키지 안에 만드신 dto(request, response)는 private final로 선언하셔서 데이터가 변경되지 않도록 선언하셨고,
서비스단 패키지 안에 만드신 ReviewDto는 private으로만 선언하여 데이터가 언제든 변경이 되게끔 선언하셨는데
이 차이가
서비스단 로직의 데이터는 비즈니스 로직을 통해 언제든 변할 수 있기 때문이고
컨트롤러단 로직은 받아온 데이터와, 응답하는 데이터이기 때문에 변할 일이 없기에 선언 방식이 다른 것이 맞을까요?
너무 기초적인 부분일 수 있지만
제가 이해한 바가 맞는지 궁금하여 질문드립니다.
답변 2
0
2024. 03. 26. 17:33
안녕하세요. 지식공유자 쥬쥬입니다.
말씀하신 DTO는 일반적으로 대부분 불변성을 띕니다 ! 일반적으로 실무에서 불변하지 않은 것은 Entity(JPA Entity) 입니다. 실습에서는 최대한 다양하게 코딩하는 것을 지향했기 때문에 말씀하신대로 개발했던 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
gggg5555님, 질문하신 DTO 관련하여 말씀드리겠습니다.
DTO(Data Transfer Object)의 사용 목적과 맥락에 따라 선언 방식이 다를 수 있습니다.
컨트롤러(Api)에서 사용하는 DTO는 외부에서 요청받은 데이터 혹은 외부로 응답하는 데이터를 목적으로 합니다. 이 데이터는 요청이 처리되는 동안 변경될 필요가 없기 때문에 private final
로 선언하여 불변성을 갖추는 것이 일반적입니다. 불변 객체로 선언함으로써, 실수로 데이터를 변경하는 것을 방지하고, 여러 스레드에서 동시에 접근해도 데이터 일관성을 유지할 수 있습니다.
서비스단에서 사용하는 DTO의 경우, 비즈니스 로직을 처리하면서 데이터의 상태가 변할 수 있어야 할 필요가 있습니다. 따라서 해당 데이터들이 상황에 따라 변경될 수 있도록 private
으로만 선언하여 일부 유연성을 제공합니다.
따라서 말씀하신 바와 같이, DTO의 선언 방식은 해당 DTO가 사용되는 맥락에 따라 달라질 수 있으며, 컨트롤러 단계에서는 데이터의 불변성을 확보하기 위해 private final
을 사용하고, 서비스단에서는 필요에 따라 데이터가 변할 수 있도록 설계하는 것이 맞습니다.
질문하신 내용에 대한 이해가 정확하신 것으로 보입니다! 추가적인 궁금증이 있다면 언제든지 질문해 주세요.