[Java] @NotBlank, @NotNull, @NotEmpty 차이

 

 

 

개발 중 RequestDto를 생성할 때,

값 검증을 위해 @NotBlank, @NotNull, @NotEmpty와 같은 어노테이션을 사용하는 경우가 많다.

 

해당 어노테이션은 Spring Validation 라이브러리에 포함되어있으며,

아래 코드를 build.gralde에 넣어 추가할 수 있다.

 

build.gralde

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

UserRequestDto.java

public class UserLoginRequestDto {

    @Email(message = "이메일 형식에 맞지 않습니다")
    @NotBlank
    private String email;
    
    /*생략*/
}

 

위는 DTO에 @NotBlank를 적용하여 공백값이 입력되지 않도록 방지한 간단한 사용 예시이다.

 

 

이 포스팅을 작성해야지 라고 생각했던 이유는 아래와 같다.

본인은 별 생각없이 3가지 어노테이션을 구분하지 않고 사용하고 있었고, 그러던 중 왜 어떤 코드는 @NotNull을 사용했고 어떤 코드는 @NotBlank를 사용했냐는 질문을 받고 순간 뇌가 정지되었던 기억이 있다.

 

때문에 이에 대해 정리해두고자 한다.

비슷하지만 조금씩 차이가 있는 3가지 어노테이션을 구분해서 사용하지 않으면 큰 오류로 이어질 수 있다.

그럼 어디가 어떻게 다른지 알아보자.

 

 

@NotNull

해당 어노테이션은 말 그대로 값에 null을 허용하지 않겠다는 뜻이다.

null만 아니라면 “ “, ””공백 값은 허용한다는 뜻이 된다.


@NotEmpty

해당 어노테이션은 빈값을 허용하지 않겠다는 뜻이다.

null값 뿐만 아니라, “”또한 허용하지 않는데

이때 공백인 “ “는 허용하기 때문에 공백이 허용되는 경우에만 사용하도록 하자.


@NotBlank

해당 어노테이션은 null뿐만 아니라 “”, “ “등의 빈 값은 모두 허용하지 않는 어노테이션이다.

해당 어노테이션을 사용하면 의미없는 값을 받지 않도록 DTO에 설정을 해줄 수 있어 간편하다

 

 


 

마지막으로 정리해보자!

null만 아니라면 상관없는 상황이라면 @NotNull, null과 빈 값은 안되지만 공백까지는 허용이 되는 경우는 @NotEmpty, null, 빈 값, 공백이 모두 허용되지 않는 상황이라면 @NotBlank를.

용도에 맞게 코드를 작성하는 습관을 들이도록 노력하자

728x90