• Home
  • About
    • JOOS photo

      JOOS

      Joos's blog

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[Null Safety 2편] Optional이란?

22 May 2019

Reading time ~1 minute

제 블로그의 모든 글은 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 클래스 쓰는 법

  1. null이 아닌 객체를 담고 있는 Optional 객체
  2. 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()과 반대


algorithmpython Share Tweet +1