
@NotNull, @NotEmpty, @NotBlank 비교Backend/Spring2025. 2. 5. 20:23
Table of Contents
@NotNull
, @NotEmpty
, @NotBlank
는 스프링에서 유효성 검사를 할 때 사용하는 어노테이션들이다.
각각의 어노테이션들은 역할이 유사해보이지만, 허용하는 값의 범위가 다르다. 차례대로 설명해보겠다.
1. @NotNull
특징
- null값을 허용하지 않는다.
- 문자열의 경우, 빈 문자열(
""
) 또는 공백 문자열(" "
)은 허용된다.
사용 예시
public class UserDTO {
@NotNull(message = "이름은 null일 수 없습니다.")
private String name;
}
사용 시 참고
- 객체나 필드가 반드시 초기화되어야 할 때 사용한다.
- 단, 문자열이 비어 있거나 공백만 있는지에 대한 검증은 하지 않는다.
2. @NotEmpty
특징
- null과 빈 문자열(
""
)을 허용하지 않는다. - 공백 문자열(
" "
)은 허용한다. 엄연히 말해서 공간을 차지하는 문자가 들어있기 때문이다. - 컬렉션(List, Set등)이나 배열에도 사용 가능하며, 요소가 하나도 없으면 유효성 검증에 실패한다.
사용 예시
public class ProductDTO {
@NotEmpty(message = "제품명은 빈 값일 수 없습니다.")
private String productName;
}
사용 시 참고
- 문자열의 경우, 공백만 있는 값은 통과되므로 이 어노테이션을 사용하려면 추가적인 검증이 필요하다.
- 주로 사용자 입력 값에서 공백만 입력된 경우를 막기 위해 사용한다.
3. @NotBlank
특징
- 문자열에 대해 null, 빈 문자열(
""
), 공백 문자열(" "
) 모두 허용하지 않는다.
사용 예시
public class CommentDTO {
@NotBlank(message = "댓글 내용은 공백만 있을 수 없습니다.")
private String content;
}
사용 시 참고
- 문자열에 대한 가장 엄격한 검증을 수행한다.
4. 어노테이션 표로 비교해보기
어노테이션 | null 허용 | 빈 문자열 허용 ("") | 공백 문자열 허용 (" ") | 적용 대상 |
@NotNull | x | o | o | 모든 객체 |
@NotEmpty | x | x | o | 문자열, 컬렉션, 배열 |
@NotBlank | x | x | x | 문자열 |
null과 빈 문자열, 공백 문자열을 다 통제하는 NotBlank가 가장 좋아 보일 수 있는데 컬렉션이나 배열을 검증하는 것은 @NotEmpty 뿐이기 때문에 상황에 맞게 선택하는 것이 중요하다.
'Backend > Spring' 카테고리의 다른 글
Bean 등록할 때 @Configuration을 사용해야 하는 이유 (0) | 2024.12.29 |
---|---|
BeanFactory와 ApplicationContext (0) | 2024.12.28 |
서블릿 컨테이너 초기화와 스프링의 처리 방식 (0) | 2024.12.27 |
4부: @ConfigurationProperties으로 타입 안전하게 외부 설정 관리 (0) | 2024.12.23 |
3부: 스프링 레거시와 스프링부트의 외부 설정 (1) | 2024.12.21 |
@nuheajiohc :: nuheajiohc
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!