@NotNull이랑 @NotBlank 차이점@NotNull이랑 @NotBlank는 둘 다 유효성 검사 어노테이션(Validation Annotation)인데,
검사 대상이 어떤 타입이냐에 따라 용도와 검사 방식이 다르다.
@NotNullNull인지 아닌지만 검사함
아무 값도 없으면(=null이면) 오류 발생
문자열, 객체, 숫자, 리스트 등 모든 타입에 사용 가능
@NotNull
private String name;
검사 결과:
"John" → ✅
"" (빈 문자열) → ✅ (null은 아니니까 통과!)
null → ❌
@NotBlank문자열 전용
null, 빈 문자열 "", 공백 " " 도 모두 ❌
즉, "내용이 있는지"까지 확인
@NotBlank
private String name;
검사 결과:
"John" → ✅
"" → ❌
" " → ❌
null → ❌
| 어노테이션 | null 체크 | "" 체크 | " " 체크 | 대상 타입 |
|---|---|---|---|---|
@NotNull | ❌ 에러 | ✅ 통과 | ✅ 통과 | 모든 타입 |
@NotBlank | ❌ 에러 | ❌ 에러 | ❌ 에러 | 문자열 전용 |
@NotEmpty도 있어!컬렉션이나 배열, 문자열에 사용
null이거나 빈 값이면 ❌, 공백 " "은 통과
// 사용자의 이름은 필수 + 공백도 안됨
@NotBlank
private String username;
// 사용자 나이는 null만 아니면 OK
@NotNull
private Integer age;
@NotNull 대체 어노테이션| 대체 어노테이션 | 설명 | 차이점 |
|---|---|---|
@NotBlank | 문자열 전용, 공백도 ❌ | 문자열이 비거나 공백인 것도 막고 싶을 때 |
@NotEmpty | 문자열, 컬렉션, 배열 등에서 빈 값 ❌ | null과 "", 빈 리스트도 막고 싶을 때 |
@Validated(groups = ...) | 그룹별로 유효성 검사 | 특정 상황에서만 @NotNull 적용하고 싶을 때 |
@NonNull (lombok) | 컴파일 시점에 체크 (런타임 검사는 아님) | 코드 간결하게 쓰고 싶을 때 |
@NotNull // null만 막음
@NotEmpty // null + "" + 빈 컬렉션 막음
@NotBlank // null + "" + " " (공백문자)도 막음
@NonNull vs @NotNull@NonNull은 Lombok에서 제공하는 것으로,@NonNull
private String name; // 컴파일 시점에 null 방지 목적 (런타임 X)
| 목적 | 추천 어노테이션 |
|---|---|
| 단순 null 체크 | @NotNull |
| 문자열인데 빈 값/공백도 막고 싶음 | @NotBlank |
| 컬렉션/배열도 비어있으면 안 됨 | @NotEmpty |
| 컴파일러 수준에서만 경고 | @NonNull (lombok) |
저도 강아지 보고싶어요! (라고 전해주세요)