작성
·
69
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
controllerV4에서 edit메서드를 고치는 도중에 itemRepository.update()에서 cmd+p 를 통해 파라미터 정보를 확인해보니 Item이 @NotNull 이라고 나옵니다
하지만 ItemRepository에서 update 메서드를 확인해보니 파라미터에 @NotNull 조건이 없는데 어떻게 NotNull 이라고 나오는걸까요??
답변 1
0
안녕하세요. Chan님, 공식 서포터즈 OMG입니다.
저도 이유를 몰라서 몇 가지 확인을 해보았는데, 표시되는 기준을 테스트로 확인해보니 생각보다 추론 근거는 단순하였습니다.
itemRepository의 코드가 아래와 같이 두번째 인자인 updateParam을 통해 getter와 같은 메서드를 호출하면(즉, 두번째 인자 객체를 사용하면) Controller에서 이 메서드(update()) 가 사용중인걸 인지하여 @NotNull을 추가해줍니다.
public void update(Long itemId, Item updateParam) {
Item findItem = findById(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
반대로 아래와 같이 메서드에 선언만 되어 있고 사용하지 않는다면
@NotNull이 추가되지 않습니다.
인텔리제이에서는 메서드가 어디에서 사용되고 얼만큼 호출되는지 체크(usage 표기)가 가능하기 때문에 이 기능도 어떻게 보면 불가능한 추론은 아닌 것 같네요 😀
감사합니다.
이해 됐습니다! 답변 감사합니다ㅎㅎ