개발/JAVA
Java Optional 사용방법
라니킴
2022. 2. 14. 13:17
1. Optional이란?
모든 타입의 객체를 감싸는 래퍼 클래스로 JDK1.8부터 추가되었다.
1. 1 Optional을 사용하는 이유
- Optional 객체에 담아서 반환을 하면, 반환된 결과가 null 인지 매번 if 문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 처리를 할 수 있다.
- 널 체크를 위한 if 문 없이도 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능하다.
Review reviews = reviewRepository.findAllById(reviewId);
만약 reviews를 조회했을 때 결과값이 없다면 NullPointerException이 발생하기 때문에 이 부분에 대해서 예외처리가 필요하다.
1.2 Optinal<T> 객체 생성하기
- of() 또는 ofNullable() 사용한다.
- 만일 참조변수의 값이 null일 가능성이 있으면, of() 대신 ofNullable()을 사용해야 한다.
- of()는 매개변수의 값이 null이면 NullPointerException이 발생한다.
Optional<List<Movie>> movieList1 = Optional.of(movieList);
// 참조변수의 값이 null 일 가능성이 있으면
Optional<List<Movie>> movieList1 = Optional.ofNullable(movieList);
- 기본값으로 초기화 할 때는 empty() 사용
Optional<List<Movie>> movieList2 = Optional.<List<Movie>>empty(); //빈 객체로 초기화
1. 3 Optional<T> 객체 값 가져오기
get()/orElse()/orElseGet / orElseThrow()
- get() : 값이 null 일 때는 NoSuchElementException이 발생하며, 이를 대비해서 orElse()로 대체할 값을 지정할 수 있다.
Optional<String> optVal = Optional.of(new String("abc"));
String str1 = optVal.get(); // null이면 예외발생
String str2 = optVal.orElse(" "); // optVal에 저장된 값이 null일 때는, ""를 반환
- orElseGet() : null을 대체할 값을 반환하는 람다식 지정 가능
- orElseThrow() : 지정된 예외를 발생시킬 수 있다.
String str1 = optVal.orElseGet(String::new); // () -> new String() 과 동일
String str2 = optVal.orElseThrow(NullPointerException::new) // null이면 예외발생
- isPresent() : optinal객체의 값이 null이면 false, 아니면 true 를 반환한다.
- ifPresent() : 값이 있으면 주어진 람다식을 수행하고, 없으면 아무 일도 하지 않는다.
Optional<List<Movie>> movieList = Optional.ofNullable(movieList);
if(movieList != null) {
System.out.println("검색 결과가 없습니다. ");
}
// isPresent() 사용
if (movieList.isPresent()) {
System.out.println(str);
}
// ifPresent() 사용해서 더 간단히 작성 가능하다. str이 null 이 아닐때만 출력
movieList.ifPresent(System.out::println)