@NotBlank, @NotNull, @NotEmpty는 Java Bean Validation에서 사용하는 제약 조건(annotation)이다. 비슷해 보이지만 동작하는 조건이 다르다.
@NotNull설명: null이 아니어야 함
허용 안 함: null
허용: "" (빈 문자열), [] (빈 리스트)
적용 대상: 모든 객체
@NotNull
private String name;
| 값 | 허용 여부 |
|---|---|
"abc" | ✅ |
"" | ✅ |
null | ❌ |
@NotEmpty설명: null도 안 되고, 비어있어도 안 됨
허용 안 함: null, "", 빈 콜렉션
적용 대상: 문자열, 배열, 컬렉션 등
@NotEmpty
private List<String> tags;
| 값 | 허용 여부 |
|---|---|
[“a”, “b”] | ✅ |
[] | ❌ |
null | ❌ |
@NotBlank설명: null, 빈 문자열, 공백 문자열 안 됨
허용 안 함: null, "", " "
적용 대상: 문자열만
@NotBlank
private String description;
| 값 | 허용 여부 |
|---|---|
"내용" | ✅ |
"" | ❌ |
" " | ❌ |
null | ❌ |
| 어노테이션 | null 금지 | 빈 값 금지 (""/빈 콜렉션) | 공백 문자열 금지 (" ") | 대상 타입 |
|---|---|---|---|---|
@NotNull | ✅ | ❌ | ❌ | 모든 객체 |
@NotEmpty | ✅ | ✅ | ❌ (공백은 문자열로는 허용) | 문자열/콜렉션 등 |
@NotBlank | ✅ | ✅ | ✅ | 문자열만 |
필드에 어떤 걸 써야 할지 애매하면 다음 기준으로 선택하면 좋다:
문자열에서 공백도 허용하지 않으려면 → @NotBlank
리스트나 배열에 최소 한 개 이상 있어야 하면 → @NotEmpty
그냥 null만 피하고 싶으면 → @NotNull
항상 헷갈리는 세 개였는데 감사합니다~