• 8버전부터 생긴 클래스로 Null 값을 허용하는 Wrapper클래스
  • NullPointerException을 회피할 수 있음

Optional 객체 생성

Optional opt = Optional.empty()				// 빈객체
Optional opt2 = Optional.of("Optional 객체")		// value가 null이 아닌 객체
Optional opt3 = Optional.ofNullable("Optional 객체")	// value가 null이거나 아닌 객체

→ of()의 경우 value에 null이 오면 Exception발생

Optional 객체 접근

  • isPresent() : not null일 경우 true
  • get() : 객체의 value 출력
    • 되도록 사용하지 말고 아래 3가지 orElse 시리즈를 사용하자
  • orElse(“value”) : null일 경우 null대신 value 반환, 연산을 삽입했을 시 null과 상관없이 실행됨
  • orElseGet(“value”) : null일 경우 null대신 value 반환, 연산을 삽입했을 시 null일 경우만 실행됨
  • orElseThrow(exception) : null일 경우 exception발생
  • ifPresent(function) : not null일 경우 구현한 function 실행
// 1. orElseGet()
// Bad
Optional<Member> member = ...;
if (member.isPresent()) {
    return member.get();
} else {
    return null;
}

// Good!!!
Optional<Member> member = ...;
return member.orElse(null);


// 2. orElseThrow()
// Bad
Optional<Member> member = ...;
if (member.isPresent()) {
    return member.get();
} else {
    throw new NoSuchElementException();
}

// Good!!!
Optional<Member> member = ...;
return member.orElseThrow(() -> new NoSuchElementException());