Backend/Spring

[Spring] @NotNull, @NotEmpty, @NotBlank 차이점

누구세연 2024. 9. 21. 15:59

@NotEmpty, @NotNull, @NotBlank는 Spring Boot에서 빈 값이나 null 값에 대한 유효성 검사를 할 때 사용하는 제약 조건 어노테이션입니다. 각각의 차이점을 이해하기 위해 어떤 값을 허용하고, 허용하지 않는지 살펴보겠습니다. 🙂

 

@NotNull

NotNull

@NotNull은 필드 값이 null이 아니어야 하는 어노테이션입니다.

  • 허용되지 않는 값
    null
  • 허용되는 값
    "" 빈 문자열, [] 빈 컬렉션 등
  • 적용대상
    모든 객체 타입(String, List, Map 등)

사용 예시는 아래와 같습니다.

@NotNull 
private String name;

 

@NotEmpty

NotEmpty

@NotEmpty는 필드 값이 null이 아니면서, 길이가 0이 아니어야 하는 어노테이션입니다.

  • 허용되지 않는 값
    null, "" 빈 문자열, [] 빈 컬렉션 등
  • 허용되는 값
    길이가 1 이상인 문자열, 요소가 하나 이상인 컬렉션 등
  • 적용대상
    문자열(String), 컬렉션(Collection), 배열(Array) 등

사용 예시는 아래와 같습니다.

@NotEmpty 
private String address; // null이나 빈 문자열("")이면 안됨 
@NotEmpty 
private List<String> items; // null이나 빈 리스트([])면 안됨
 

@NotBlank

NotBlank

@NotBlank는 필드 값이 null이 아니고, 길이가 0이 아니며, 공백만으로 이루어지지 않아야 하는 어노테이션입니다.

  • 허용되지 않는 값
    null, "" 빈 문자열, " " 공백만 포함된 문자열 등
  • 허용되는 값
    공백이 아닌 문자를 포함하는 문자열
  • 적용 대상
    문자열(String) 타입만

예시는 아래와 같습니다.

@NotBlank 
private String title; // null, 빈 문자열(""), 공백 문자열(" ")이면 안됨
 

정리

@NotNull 값이 null이 아니기만 하면 됨.
@NotEmpty 값이 null이 아니면서 길이가 0이 아니어야 함.(빈 문자열, 빈 컬렉션 허용 안 됨)
@NotBlank 값이 null이 아니면서 길이가 0이 아니고, 공백 문자만으로 이루어지지 않아야 함.

이 세 가지를 적절히 조합하여 사용하면, 입력 값에 대한 유효성 검사를 더 엄격하게 할 수 있습니다.

예를 들어, 문자열의 경우 @NotBlank를 사용하여 null, 빈 값, 공백 문자열을 모두 방지할 수 있습니다.