[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);
[출처]
- 자바의정석 (저자: 남궁성)