본문 바로가기
목차
JAVA(자바)

Optional<T>

by 지각생 2022. 2. 1.
728x90

Optional 이란?

  • Optional이란, 값이 있을 수도 있고 없을 수도 있는 객체이다. 참조 타입의 객체를 한번 감싼 일종의 래퍼 클래스 이다.
  • Optional은 원소를 최대 1개 가질 수 있는 불변 Collection이다.
  • 자바 8 이전의 코드보다 null-safe한 로직을 처리 할 수 있게 해준다.
  • Optional을 반환하여 좀 더 로직을 유연하게 작성할 수 있게 해준다.

 


Optional 메서드

  • Optional.empty()
    • 내부 값이 비어있는 Optional 객체 반환
  • Optional.of(T value)
    • 내부 값이 value인 Optional 객체 반환
    • 만약 value가 null인 경우 NullPointerException 발생
  • Optional.ofNullable(T value)
    • 가장 자주 쓰이는 Optional 생성 방법
    • value가 null이면, empty Optional을 반환하고, 값이 있으면 Optional.of로 생성
  • T get()
    • Optional 내의 값을 반환
    • 만약 Optional 내부 값이 null인 경우 NoSuchElementException 발생
  • boolean isPresent()
    • Optional 내부 값이 null이면 false, 있으면 true
    • Optional 내부에서만 사용해야하는 메서드라고 생각
  • boolean isEmpty()
    • Optional 내부의 값이 null이면 true, 있으면 false
    • isPresent() 메서드의 반대되는 메서드
  • void ifPresent(Consumer<? super T> consumer)
    • Optional 내부의 값이 있는 경우 consumer 함수를 실행
  • Optional<T> filter(Predicate<T> predicate)
    • Optional에 filter 조건을 걸어 조건에 맞을 때만 Optional 내부 값이 있음
    • 조건이 맞지 않으면 Optional.empty를 리턴
  • Optional<U> map(Funtion<? super T, ? extends U> f)
    • Optional 내부의 값을 Function을 통해 가공
  • T orElse(T other)
    • Optional 내부의 값이 있는 경우 그 값을 반환
    • Optional 내부의 값이 null인 경우 other을 반환
  • T orElseGet(Supplier<? extends T> supplier)
    • Optional 내부의 값이 있는 경우 그 값을 반환
    • Optional 내부의 값이 null인 경우 supplier을 실행한 값을 반환
  • T orElseThrow()
    • Optional 내부의 값이 있는 경우 그 값을 반환
    • Optional 내부의 값이 null인 경우 NoSuchElementException 발생
  • T orElseThrow(Supplier<? extends X> exceptionSupplier)
    • Optional 내부의 값이 있는 경우 그 값을 반환
    • Optional 내부의 값이 null인 경우 exceptionSupplier을 실행하여 Exception 발생

2. 올바른 Optional 사용법 가이드

[ 올바른 Optional 사용법 가이드 ]

  • Optional 변수에 Null을 할당하지 말아라
  • 값이 없을 때 Optional.orElseX()로 기본 값을 반환하라
  • 단순히 값을 얻으려는 목적으로만 Optional을 사용하지 마라
  • 생성자, 수정자, 메소드 파라미터 등으로 Optional을 넘기지 마라
  • Collection의 경우 Optional을 사용하지 말고 빈 Collection으로 처리하라
  • 반환 타입으로만 사용하라



출처: https://mangkyu.tistory.com/203 [MangKyu's Diary]

 

 

728x90

댓글