더 나은 내일의 내가 되자!

Optional 본문

프로그래밍/JAVA

Optional

프루니에 2021. 7. 15. 20:54

자바 8부터 NPE(NullPointerException) 처리의 가독성을 위해 생겼습니다.

Optional이란?

  • 존재할수도 있지만 안할 수도 있는 객체, null이 될 수도 있는 객체를 감싸고 있는 일종의 래퍼 클래스이다

Optional의 효과

  • 명시적으로 해당 변수가 null일 수도 있다는 가능성을 표현할 수 있다
  • NPE를 유발할 수 있는 null을 직접 다루지 않는다
  • null체크를 직접 하지 않는다

Optional사용법

// 선언
Optional<Member> optMbr;

// null을 담고 있는 Optional 객체
Optional<Member> optMbr = Optional.empty();

// null이 아닌 객체를 담고 있는 Optional 객체를 생성
// null이 넘어올 경우, NPE를 던지기 때문에 주의해서 사용
Optional<Member> optMbr = Optional.of(member);

// null이 넘어오면 비어있는 Optional 객체를 반환
// null이 있는지 없는지 모를 경우 사용
Optional<Member> optMbr = Optional.ofNullable(member);

// 객체가 존재하면 true, 비어있는 경우 false
if (optMbr.isPresent()) { System.out.println(optMbr.get()); }

// 객체가 존재하면 작업을 진행
// return void
optMbr.ifPresent(item -> System.out.println(item));

// 비어있는 Optional 객체에 대해서, NoSuchElementException을 던짐
// 비어있지 않은 Optional에 사용해야 함
optMbr.get();

// 옵셔널이 비어 있다면 파라미터로 입력한 인자를 리턴하게 됨
optMbr.orElse(T other);

// 비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 통해 생성된 객체를 반환
// orElse(T other) 메소드와 동일하게 리턴 하지만 비어있는 경우만 함수를 호출해서 성능상 이점 기대 가능
optMbr.orElseGet(Supplier<? extends T> other);

//비어 있는 Optional객체에 대해, 넘어온 함수형 인자를 통해 생성된 예외를 던짐
optMbr.orElseThrow(Supplier<? extends X> exceptionSupplier);

/* 활용예 */
Optional.ofNullable(member)
        .map(Member::getName)
        .orElse("prunier");

'프로그래밍 > JAVA' 카테고리의 다른 글

Junit5 - @AfterEach  (0) 2021.07.15
람다식 ::  (0) 2021.07.15
스트림(Stream) 간단히  (0) 2021.07.15
자바8 (JDK 1.8) 환경설정  (0) 2021.03.13