Optional
- 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
시리즈를 사용하자
- 되도록 사용하지 말고 아래 3가지
- 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());