인프런 커뮤니티 질문&답변

skj3232님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

변경 감지와 병합(merge)

변경감지로 코드를 변경할 때

해결된 질문

21.12.17 11:10 작성

·

216

1

지금 예제에서는 Book만 수정을 하니 만약에 Book만 가지고 있는 멤버인 ISBN과 작가를 수정하려면 이렇게 케스팅 해주는 방법밖에 없을까요? updateItem 메소드 하나로 item을 상속 받는 구현체들인 Book, Album, Movie를 업데이트 하는 방법이 있는지 궁금하고 혹은 있더라도 그것 보다는 각각을 따로 Dto를 만들어서  updateBook 이런식으로 하는게 더 좋나요? 저는 일단 다운캐스팅으로 Dto 따로 안만들고 했습니다.

답변 1

2

codesweaver님의 프로필 이미지

2021. 12. 17. 16:17

안녕하세요, skj3232 님. 공식 서포터즈 codesweaver 입니다.
.
상속에 대해 생각할 때, 어떤 객체를 확장하여 새로운 객체를 만든다는 접근도 가능하지만, 이미 존재하는 객체들의 공통점을 뽑아 추상화한다는 개념으로 접근하기도 합니다. 지금같은 경우, 책, 앨범, 영화에 존재하는 공통된 요소들을 모아 Item 객체로 추상화했다고 할 수 있습니다.

.

책, 앨범, 영화는 각각의 고유한 프로퍼티를 갖습니다. 물론 이런 고유한 프로퍼티도 '추상화'를 통해 Item 하나로 모두 통일해 버릴 수 있습니다. 그러면 애초에 상속관계를 이용하지 않고 사용하는것도 가능합니다(그렇게 되면 updateItem() 하나로 모든 값에 대한 처리가 가능합니다). Item 하나로 통합하라고 말씀드린것은 아니고 설계 필요에 따라 그런 방법도 가능하다는 말씀을 드린것입니다.

.

그리고 파라미터의 갯수가 늘어날 때 이를 DTO 객체로 감싸는 것은 권장할만한 방법입니다. 사용하기 쉬운 메서드가 무엇인가? 라는 질문에 대한 답은 '파라미터가 필요 없는 메서드' 입니다. 그 다음은 '파라미터가 1개만 필요한 메서드'입니다. 이처럼 파라미터의 갯수가 많아지는 것은 그 메서드를 사용하기 힘들게 합니다. 그래서 DTO 객체 하나로 필요한 값들을 묶어서 보냅니다. 파라미터 갯수는 보통 2~3개까지는 그냥 보내고, 그 이상 늘어나게 되면 DTO 객체를 하나 감싸서 보내는 경우가 많습니다.

 

또 Map<String, String>의 형태로 파라미터를 전달할 때가 있는데 이는 추천하지 않습니다. 메서드 입장에서 파라미터를 보고 어떤 값들이 넘어오는지 전혀 예측할 수 없습니다(어떤 값이 넘어오는건지 확인하려면 View단의 폼 까지 확인해야 하는 경우도 생깁니다). 반면 DTO 객체가 넘어오는 경우 DTO 객체를 열어 필드를 확인하면 어떤 값들이 어떻게 오는지 쉽게 파악할 수 있습니다. 각 설계마다 장단점이 있으니 상황에 맞게 구현하는 것이 중요합니다.

.
감사합니다.

 

skj3232님의 프로필 이미지
skj3232
질문자

2021. 12. 18. 00:35

딱 제가 원하던 답변이었습니다 감사합니다!!!!!

skj3232님의 프로필 이미지

작성한 질문수

질문하기