JAVA Optional

전윤지·2021년 12월 9일
0

JAVA

목록 보기
9/10

1. Optional이란?

  • NullPointerException 처리를 하는 Wrapper 클래스
  • 기존에는 if문으로 null값을 체크 -> 복잡함, 가독성 떨어짐 -> Optional사용으로 간단하게 예외처리 가능

Wrapper class?

기본 타입(원시 타입)을 객체로 다루기 위해 사용하는 클래스
ex) int : Integer (기본, wrapper), char : Character (기본, wrapper)


2. Optional 사용

1) Optional 선언

  • 제네릭 제공
// Order 타입의 객체를 감쌀 수 있는 Optional 타입의 변수
Optional<Order> maybeOrder; 
// Member 타입의 객체를 감쌀 수 있는 Optional 타입의 변수
Optional<Member> optMember; 

2) Optional 생성

(1) empty()

  • null을 담고있는, 비어있는 Optional 객체 생성

(2) of(value)

  • null이 아닌 객체를 담는 Optional 객체 생성
  • null이 넘어올 경우, NPE를 발생시킴 (주의❗)
Optional<Member> maybeMember = Optional.of(aMember);

(3) ofNullable(value)

  • null인지 아닌지 확신할 수 없을 때 사용
  • null이 넘어올 경우, NPE발생 X. 비어있는 Optional 객체 반환 (Optional.empty())
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
// 값이 없다면 "anonymous" 를 리턴
String name = optional.orElse("anonymous"); 

3) Optional 접근

(1) get()

  • 비어있는 Optional 객체에 접근할 경우, NoSuchElementException 발생

(2) orElse(T other)

  • Optional 객체가 비어있다면, other 객체 반환
  • Optional 안의 값이 null이든 아니든 항상 호출됨
Optional<String> optStr = Optional.ofNullable(null);
String result = optStr.orElse("Value = null);
System.out.println(result); // Value = null

(3) orElseGet(Supplier< ? extends T> other)

  • Optional 안의 값이 null일 경우에만 호출됨
    => orElse(T other)의 게으른 버전
String str = "test";
//null이 아니여도 getDefaultValue() 함수는 실행함
String result1 = Optional.ofNullable(str).orElse(getDefaultValue()); 
LOG.info("orElse result: {}", result1);

// getDefaultValue() 실행하지 않음
String result2 = Optional.ofNullable(str).orElseGet(this::getDefaultValue);
LOG.info("orElseGet result: {}", result2);

(4) ifPresent()

  • 지정된 값이 있으면 true. 없으면 flase

(5) orElseThrow(Supplier< ? extends X> exceptionSupplier)

  • 비어있는 Optional 객체에 대해, 예외를 던짐

0개의 댓글