제 블로그의 모든 글은 IMHO로 쓴 것입니다. 잘못된 부분이 있으면 덧글을 통해서 소통을 하면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 그렇지만 소통을 할 때 서로의 감정을 존중하는 선에서 해주셨으면 좋겠습니다. 감사합니다:) — 이 글은 시리즈 물입니다. [Null Safety 1편] NPE(NullPointerException)란? 극복법은? @NotEmpty, @NotBlank, @NotNull 차이란? @Column(nullable = false)이란? @Nullable이란? https://joosjuliet.github.io/orm_jpa_hibernate/
[Null Safety 2편] Optional이란? https://joosjuliet.github.io/optional/
—
Optional이란?
값이 있거나 또는 없는 경우를 표현하기 위한 클래스 Optional는 “존재할 수도 있지만 안 할 수도 있는 객체”입니다.
즉, “null이 될 수도 있는 객체”을 감싸고 있는 일종의 래퍼 클래스입니다.
직접 다루기에 위험하고 까다로운 null을 담을 수 있는 특수한 그릇입니다.
Optional 클래스 쓰는 법
- null이 아닌 객체를 담고 있는 Optional 객체
- null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성
1. null이 아닌 객체를 담고 있는 Optional 객체
Optional<Member> maybeMember = Optional.empty();
Optional.of(value)
- null이 아닌 객체를 담고 있는 Optional 객체를 생성합니다.
- null이 넘어올 경우, NPE를 던지기 때문에 주의해서 사용해야 합니다.
2. null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성
Optional<Member> maybeMember = Optional.of(aMember);
Optional.ofNullable(value)
- null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성합니다.
- Optional.empty()와 Optional.ofNullable(value)를 합쳐놓은 메소드라고 생각하시면 됩니다.
- null이 넘어올 경우, NPE를 던지지 않고 Optional.empty()와 동일하게 비어 있는 Optional 객체를 얻어옵니다.
- 해당 객체가 null인지 아닌지 자신이 없는 상황에서는 이 메소드를 사용하셔야 합니다.
가장 큰 오류 “Optional 적용 후 어떻게 null 체크를 해야하나요?” “null 체크를 하실 필요가 없으시니 하시면 안 됩니다.”
우리가 Optional을 사용하려는 이유는 고통스러운 null 처리를 직접하지 않고 Optional 클래스에 위임하기 위함입니다.
Objects.isNull()
이건 optional로 null을 검사하는게 아니라 Objects로 null인지를 확인하는 것
- x == null 과 같지만 “null”을 잘못 쓸 위험을 피할 수 있따.
- Objects.nonNull()과 반대