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

Chan님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

Form 전송 객체 분리 - 개발

update() 에서 Item 을 @NotNull로 추론할 수 있는 근거가 궁금합니다.

작성

·

49

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

 

 

스크린샷 2024-09-04 오후 7.34.40.png스크린샷 2024-09-04 오후 7.35.40.png

 

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());
}

반대로 아래와 같이 메서드에 선언만 되어 있고 사용하지 않는다면

image.png

@NotNull이 추가되지 않습니다.

image.png

 

인텔리제이에서는 메서드가 어디에서 사용되고 얼만큼 호출되는지 체크(usage 표기)가 가능하기 때문에 이 기능도 어떻게 보면 불가능한 추론은 아닌 것 같네요 😀

감사합니다.

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

이해 됐습니다! 답변 감사합니다ㅎㅎ

Chan님의 프로필 이미지

작성한 질문수

질문하기