개발 중 RequestDto를 생성할 때,
값 검증을 위해 @NotBlank, @NotNull, @NotEmpty와 같은 어노테이션을 사용하는 경우가 많다.
해당 어노테이션은 Spring Validation 라이브러리에 포함되어있으며,
아래 코드를 build.gralde에 넣어 추가할 수 있다.
build.gralde
implementation 'org.springframework.boot:spring-boot-starter-validation'
UserRequestDto.java
public class UserLoginRequestDto {
@Email(message = "이메일 형식에 맞지 않습니다")
@NotBlank
private String email;
/*생략*/
}
위는 DTO에 @NotBlank를 적용하여 공백값이 입력되지 않도록 방지한 간단한 사용 예시이다.
이 포스팅을 작성해야지 라고 생각했던 이유는 아래와 같다.
본인은 별 생각없이 3가지 어노테이션을 구분하지 않고 사용하고 있었고, 그러던 중 왜 어떤 코드는 @NotNull을 사용했고 어떤 코드는 @NotBlank를 사용했냐는 질문을 받고 순간 뇌가 정지되었던 기억이 있다.
때문에 이에 대해 정리해두고자 한다.
비슷하지만 조금씩 차이가 있는 3가지 어노테이션을 구분해서 사용하지 않으면 큰 오류로 이어질 수 있다.
그럼 어디가 어떻게 다른지 알아보자.
@NotNull
해당 어노테이션은 말 그대로 값에 null을 허용하지 않겠다는 뜻이다.
null만 아니라면 “ “, ”” 등 공백 값은 허용한다는 뜻이 된다.
@NotEmpty
해당 어노테이션은 빈값을 허용하지 않겠다는 뜻이다.
null값 뿐만 아니라, “”또한 허용하지 않는데
이때 공백인 “ “는 허용하기 때문에 공백이 허용되는 경우에만 사용하도록 하자.
@NotBlank
해당 어노테이션은 null뿐만 아니라 “”, “ “등의 빈 값은 모두 허용하지 않는 어노테이션이다.
해당 어노테이션을 사용하면 의미없는 값을 받지 않도록 DTO에 설정을 해줄 수 있어 간편하다
마지막으로 정리해보자!
null만 아니라면 상관없는 상황이라면 @NotNull, null과 빈 값은 안되지만 공백까지는 허용이 되는 경우는 @NotEmpty, null, 빈 값, 공백이 모두 허용되지 않는 상황이라면 @NotBlank를.
용도에 맞게 코드를 작성하는 습관을 들이도록 노력하자
'Language > Java' 카테고리의 다른 글
[Java] 클래스 멤버는 각자의 위치가 존재한다 (0) | 2024.02.28 |
---|---|
[Java] LinkedHashMap을 통한 기초 캐싱 (0) | 2024.02.25 |
[Java] - Comparable 인터페이스란? (1) | 2023.01.21 |
[JAVA] ObjectMapper를 통한 손쉬운 객체 형식 변환 (2) | 2022.09.17 |
[Java] 여러 데이터를 저장하는 법 - Array, List, Map (3) | 2022.08.15 |