[Java] 22. Optional


Optional을 사용하면 값이 없는 상황에 대해 명시적으로 다룰 수 있습니다. Null 체크를 직접 하지 않고도 코드 안전성을 높일 수 있다. 내일은 쉬어야 곘다. 12월 부터는 내 개인프로젝트를 위해 포스팅을 줄여야 곘다.


1. Optional<T>

메소드가 반환할 결과 값이 ‘없음’을 명백하게 표현할 필요가 있고,
null 을 반환하면 에러가 발생할 가능성이 높은 상황에서
메소드의 반환 타입으로 Optional 을 사용하자는 것이 Optional 을 만든 주된 목적이다.

Optional은 Null 체크나 예외 처리를 간편하게 할 수 있도록 도와주며, Optional은 함수형 프로그래밍 스타일에 잘 맞게 지원해준다. 메서드 체이닝과 람다 표현식과 함께 사용하여 간결하고 함수적인 코드를 작성할 수 있습니다. Optional<T> 는 T타입의 객체의 래퍼 클래스이다.

public final class Optional<T> {
    private final T value;  //T 타입의 참조변수
}

최종연산의 결과를 그냥 반환하는게 아닌 Optional 객체에 담아서 반환하는 것이다.


2. Optional 객체 생성

String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
Optional<String> optVal = Optional.of(null);            //NPE 발생
Optional<String> optVal = Optional.ofNullable(null);    //정상

Optional<String> optVal = Optional.<String>empty();     //빈 객체로 초기화


3. Optional 객체 값 가져오기

Optional<String> optVal = Optional.of("abc");

String str1 = optVal.get();
String str2 = optVal.orElse("");                             //null인 경우, ""를 반환
String str3 = optVal.orElseGet(String::new);
String str4 = optVal.orElseThrow(NullPointException::new);  //널이면 예외 발생


Optional 객체 null 체크

isPresent()

null 이면 false, 아니면 true

if (Optional.ofNullable(str).isPresent()) { //if(str != null)
    //...
}


ifPresent()

null 이 아닌 경우만 처리

Optional.ofNullable(str).ifPresent(System.out::println);




[출처]

  • 자바의정석 (저자: 남궁성)