개발하다보면 메서드의 파라미터의 유효성을 검사하기 위해 null 체크를 하게됩니다. 이러한 체크 과정이 번거로워서 알아보던 중에 @Nonnull 어노테이션과 @NotNull 어노테이션에 대해 알게되어서 정리하려고 합니다.
1. @Nonnull 과 @NotNull
메소드의 파라미터에 사용할 수 어노테이션으로 해당 어노테이션을 사용하면 null을 넘기는 것에 대해 주의할 수 있도록 메세지를 주는 어노테이션입니다.
2. @Nonnull vs @NotNull
두 어노테이션은 메소드로 null을 파라미터로 전달했을 때 NULL 객체를 참조하면서 NPE가 터지기 전에 예외가 발생하는지에 대한 차이가 있습니다.
테스트 결과 @Nonnull은 예외가 발생하지 않으며 @NotNull에 경우는 컴포넌트로 등록된 클래스의 메소드의 경우에만 ContraintViolationException이 발생하는 것을 확인하였습니다.
먼저 컴포넌트의 메소드가 아닐 때 @NotNull을 테스트 해보겠습니다. NormalClass는 컴포넌트가 아니며, NomarlClass의 printNotNull 메소드는 @NotNull 어노테이션이 붙어있지만 null을 파라미터로 전달해도 테스트가 정상적으로 통과하는 것을 확인할 수 있습니다.
반면 컴포넌트의 메소드인 경우 @NotNull 어노테이션이 붙은 메소드에 null을 전달하면 ConstraintViolationException이 발생하는 것을 확인할 수 있습니다.
'TIL(Today I Learned)' 카테고리의 다른 글
[Today I Learned - 5] @Transactional의 readOnly 속성 (0) | 2024.01.08 |
---|---|
[Today I Learned - 4] Mockito의 ArgumentMatchers 와InvalidUseOfMatchersException (1) | 2024.01.08 |
[Today I Learned - 2] MySQL 서버 연결 차이점 (0) | 2023.12.14 |
[Today I Learned - 1] unable to find valid certification path to requested target (0) | 2023.07.10 |
[Today I Learned - 0] Unable to find main class (0) | 2023.03.03 |