본 캠프_48일차

졸용·2025년 4월 24일

TIL

목록 보기
49/144

@NotNull이랑 @NotBlank 차이점

@NotNull이랑 @NotBlank는 둘 다 유효성 검사 어노테이션(Validation Annotation)인데,
검사 대상이 어떤 타입이냐에 따라 용도와 검사 방식이 다르다.


✅ 1. @NotNull

  • Null인지 아닌지만 검사함

  • 아무 값도 없으면(=null이면) 오류 발생

  • 문자열, 객체, 숫자, 리스트 등 모든 타입에 사용 가능

@NotNull
private String name;

검사 결과:

  • "John" → ✅

  • "" (빈 문자열) → ✅ (null은 아니니까 통과!)

  • null → ❌


✅ 2. @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

  • @NonNullLombok에서 제공하는 것으로,
    • 컴파일러에게 null 체크 힌트를 주거나,
    • 생성자 자동 생성 시 null 체크용으로 활용됨.
    • 하지만 실제 유효성 검사는 하지 않음!
@NonNull
private String name; // 컴파일 시점에 null 방지 목적 (런타임 X)

✅ 결론

목적추천 어노테이션
단순 null 체크@NotNull
문자열인데 빈 값/공백도 막고 싶음@NotBlank
컬렉션/배열도 비어있으면 안 됨@NotEmpty
컴파일러 수준에서만 경고@NonNull (lombok)
profile
꾸준한 공부만이 답이다

2개의 댓글

comment-user-thumbnail
2025년 4월 24일

저도 강아지 보고싶어요! (라고 전해주세요)

1개의 답글