public final class Optional extends object
Java 8부터 도입된 래퍼 클래스로 값이 존재할 수도 있고, 존재하지 않을 수도 있는 상황을 처리하기 위해 사용됨
즉, null 처리를 위한 클래스
// Optional.of(value) → 값이 null이 아니어야 함
Optional<String> name = Optional.of("park");
// Optional.empty() → 값이 없음
Optional<String> emptyName = Optional.empty();
// Optional.ofNullable(value) → 값이 null일 수도 있음
기존에는 어느 값이 null일 수도 있기 때문에 따로 null 처리를 해줘야 했지만, Optional을 사용한다면 간편하게 NPE를 방지할 수 있음
// 기존의 null 처리 ( 번거로움 )
if (user != null && user.getName() != null) {
return user.getName();
}
// Optional을 사용한 방식
return Optional.ofNullable(user)
.map(User::getName)
.orElse("이름 없음");
주의 사항
주요 메서드
| isPresent() | 값이 존재하는지 확인 | if(opt.isPresent()) ... |
|---|---|---|
| get() | 값 꺼내기 ( 없으면 예외 발생 ) | opt.get() |
| orElse(T other) | 값이 없을 때 기본값 반환 | opt.orElse("기본값") |
| orElseGet(Supplier) | 기본값을 지연 생성 | opt.orElseGet(() -> "기본") |
| orElseThrow() | 값이 없으면 예외 던짐 | opt.orElseThrow() |
| map(Function) | 값이 있으면 함수 적용 | opt.map(String::toUpperCase) |
| flatMap(Function) | 중첩 Optional 처리 | opt.flatMap(User::getEmail) |