작성
·
606
3
안녕하세요.
null 체크 하실 때 @NotBlank 라는 어노테이션을 붙여서 에러메시지가 나오도록 하셨는데 Optional 도 null 이 넘어올 시, null point exception이 발생하지 않도록 체크해주는 것으로 알고 있습니다. @NotBlank 와 어떤 차이가 있는 것인지 궁금합니다. 혹시 제가 놓치고 있는 부분이 있다면 짚어주시면 감사드려요.
답변 1
13
Optional의 경우 NPE가 발생하여 프로그램이 죽는 것을 막기 위해 객체를 감싸는 Wrapper 클래스이고, Java에서 8버전부터 자체적으로 지원하는 기능입니다. 다양한 상황에서 null이 발생할 수 있는 객체에 Optional을 사용하여 별도의 null 확인 절차 코드를 작성하지 않고 Optional의 메서드만으로 처리할 수 있어 코드가 직관적이고 가독성을 높여줍니다.
@NotBlank를 비롯한 @NotNull, @NotEmpty 와 같은 어노테이션들은 Java Bean Validation 에서 제공하는 유효성 검증 어노테이션이고, 스프링부트에서는 유효성 검증 구현체로 Hibernate Validator을 사용하고 있습니다. 이 친구들은 웹에서 입력값을 전달받아 dto에 저장할때 각 필드에 제약조건을 걸어 원하는 형식의 값만 받을 수 있도록 할때 사용합니다.
@NotBlank와 Optional 은 모두 null 값이 필드에 직접적으로 들어오지 못하게 한다는 점에서 공통점이 있는 반면,
Optional 객체의 경우 DB에서 값을 가져오는 것처럼 null이 생길 가능성이 있는 필드에 사용하여 NPE를 발생시키지 않으며 null인 경우 별도의 처리를 하는데에 사용되고 @NotBlank의 경우 웹환경에서 client의 입력에 대해 null 값이 들어오는지 미리 확인하고 null이라면 에러를 발생시켜 null이 들어오는것을 방지하는데에 주로 사용되게 됩니다. 주 사용처가 다릅니다.
Optional 은 서버 쪽에서 null을 처리하기 위해 사용하는 것이고, @NotBlank 는 클라이언트 쪽에서 null이 못 들어오게 막는 거라는 소린 거군요! 상세한 설명 감사드립니다!