JAVA optional

강정우·2022년 10월 25일
0

JAVA

목록 보기
24/31
post-thumbnail

Optional

이 optional은 언제 사용하는가? 바로 찾고자하는 값이 null일때 예외처리로 주로 사용한다.
그럼 이 Optional은 무엇인가?

⚖️ Optional

  • Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 하는 Wrapper 클래스이다.
    그래서 어떠한 value에 값을 저장하기 때문에 null이더라도 nullPointException이 발생하지 않고 여러 method까지 적용할 수 있도록 해준다.

🛠️ Usage

값이 null일때

public final class Optional<T> {

    private static final Optional<?> EMPTY = new Optional<>();
    private final T value;
    
    private Optional() {
        this.value = null;
    }

    ...

}
  • 사실 매번 null객체를 생성해야하는데 Optional.empty()로 EMPTY객체가 있으므로 이 객체를 공유함으로써 메모리를 절약할 수 있다.

값이 null일수도 아닐수도 있을 때

  • Optional.ofNullbale로 생성할 수 있다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.

예시

List<String> nameList = Optional.ofNullable(getNames())
    .orElseGet(() -> new ArrayList<>());
    
public String findPostCode() {
    String result = user.map(UserVO::getAddress)
        .map(Address::getPostCode)
        .orElse("우편번호 없음");
}

Optional<String> nameOpt = Optional.ofNullable(getName());
String result = nameOpt.orElseThrow(CustomUpperCaseExcpetion::new)
                 	   .toUpperCase();
  • Optional<T>와 Lambda를 이용하면 해당 과정을 보다 간단하게 표현할 수 있다.

orElse | OrElseGet

  • orElse
    파라미터로 값을 필요로한다.
    값이 미리 존재하는 경우에 사용한다.

  • orElseGet
    파라미터로 함수(함수형 인터페이스)를 필요로 한다.
    값이 미리 존재하지 않는 거의 대부분의 경우에 orElseGet을 사용하면 된다.

참조

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글