Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- R
- 이것이 자바다
- Stack
- 혼자 공부하는 C언어
- Algorithm
- C programming
- C 언어 코딩 도장
- Serialization
- 알기쉬운 알고리즘
- Selection Sorting
- JSON
- ㅅ
- buffer
- 윤성우의 열혈 자료구조
- 이스케이프 문자
- insertion sort
- 윤성우 열혈자료구조
- s
- list 컬렉션
- datastructure
- stream
- coding test
- 메모리구조
- Graph
Archives
- Today
- Total
Engineering Note
[Server] @NotNull, @NotEmpty, @NotBlank차이 (Spring Validation) 본문
Server
[Server] @NotNull, @NotEmpty, @NotBlank차이 (Spring Validation)
Software Engineer Kim 2026. 1. 13. 20:23Validation 체크해서 사용되는 어노테이션 종류
Spring Validation에서는:
- @NotNull: null만 체크 (빈 문자열은 통과)
- @NotEmpty: null과 empty 체크 (공백만 있으면 통과)
- @NotBlank: null, empty, blank 모두 체크 (가장 엄격함)
문자열 입력을 받을 때는 보통 @NotBlank를 많이 사용한다.
문자열 입력을 받을 때는 보통 @NotBlank를 많이 사용하는 이유는 null과 empty와 blank의 개념의 차이를 이해하면 쉽게 납득할 수 있다.
자바에서 유효성 검사할 때 사용하는 개념들의 차이
null은 객체가 아예 존재하지 않는 상태. 메모리에 할당된 값 자체가 없는 상태
empty는 객체는 존재하지만 내용이 비어있는 상태. 문자열로 치면 ""처럼 길이가 0인 경우
blank는 empty를 포함하면서, 공백 문자(스페이스, 탭, 줄바꿈 등)만 있는 경우도 포함. 예를 들어 " "처럼 공백만 있어도 blank로 판단.
세 가지 개념을 한 번에 이해하기 어렵거나, 헷갈릴 수 있기 때문에 null과 empty의 차이를 이해하고 blank의 개념을 이해하면 좋다.
Null과 Empty 개념
null vs empty 확실히 구분하기
String str1 = null; // 참조 자체가 없음 (객체 X)
String str2 = ""; // 객체는 있음, 내용만 없음 (객체 O)
str1.length(); // NullPointerException 발생!
str2.length(); // 0 반환 (정상 동작)
null은 참조하는 객체 자체가 없어서 메서드를 호출하면 에러가 나지만, empty는 객체가 있으니까 메서드 호출이 가능하다. 그래서 List 필드를 선언할 때 NullPointerException을 방지하기 위해 new ArrayList();로 빈객체로 초기화를 해주도록 권장한다.
비유하자면:
- null: 상자 자체가 없음
- empty: 빈 상자는 있음
Null, Empty, Blank 정리
String str1 = null; // null: true, empty: -, blank: -
String str2 = ""; // null: false, empty: true, blank: true
String str3 = " "; // null: false, empty: false, blank: true
Optional<String> opt1 = null; // null (Optional 객체 자체가 없음)
Optional<String> opt2 = Optional.empty(); // empty (Optional은 있지만 값이 없음)
Optional<String> opt3 = Optional.of(""); // Optional은 있고, 빈 문자열을 담고 있음
List<String> list1 = null; // null (리스트 객체 자체가 없음)
List<String> list2 = new ArrayList<>(); // empty (리스트는 있지만 요소가 0개)
List<String> list3 = Arrays.asList("a"); // 요소가 있음
그래서 empty라는 개념은:
문자열: ""
Optional: Optional.empty()
컬렉션: new ArrayList<>()처럼 size가 0
배열: new int[0]처럼 length가 0
주의할 점.
Optional 자체에는 blank 개념이 없다. blank는 문자열에만 해당하는 개념.
정리하면:
- Optional.empty() → Optional이 empty
- Optional.of("") → Optional은 empty 아님, 문자열이 empty
- Optional.of(" ") → Optional은 empty 아님, 문자열이 blank
'Server' 카테고리의 다른 글
| [Server] 낙관적 락(Optimistic Lock) (0) | 2026.01.17 |
|---|---|
| [JPA] QueryDsl의 join문법과 연관관계 엔티티 join에서 on절이 필요 없는 이유 (1) | 2026.01.15 |
| [Server] 고가용성(High Availability)이란? (0) | 2026.01.02 |
| [Server] 데이터베이스 커넥션풀 (0) | 2025.12.27 |
| [Server] Redis 자료구조 (1) | 2025.12.27 |
Comments