Optional의 orElse, orElseGet, orElseThrow
- Optional : NullPointerException를 방지해주는 자바 클래스, 데이터가 Null 이어도 Optional을 사용하면 처리가 가능하다. → Optional<class> 이렇게 사용한다.
- orElse
- ofNullable(isNull) : null 인가를 판별, null 이면 orElse가 호출됨
isNull = "loose";
name = Optional.ofNullable(isNull).orElse("test");
System.out.println(name); //isNull값이 null이 아니므로 "loose" 출력
isNull = null;
name = Optional.ofNullable(isNull).orElse("test");
System.out.println(name); //isNull값이 null이므로 "test" 출력
- orElseGet
- orElse와 비슷하지만, orElse는 매개변수의 값을 넘기고, orElseGet은 람다식을 넘긴다.
- orElseGet은 매개변수로 Supplier라는 함수형 인터페이스를 받는데, 이는 null인 경우 불필요한 메서드 내부 호출이 있을 때 과정은 무시하고 결과만 전달받을 수 있다.
- 따라서, orElse는 매개변수가 고정 값일 때 사용하고 orElseGet은 매개변수가 메소드일 때 사용하는 것이 좋다.
public String getName() {
System.out.println("getName 실행");
return "";
}
String name1 = Optional.ofNullable("loose").orElse(getName());
String name2 = Optional.ofNullable("loose").orElseGet(() -> getName());
System.out.println("name1 = " + name1);
System.out.println("name2 = " + name2);
//출력 결과
//getName 실행. ->
//name1 = loose -> orElse()
//name2 = loose. -> orElseGet()
- orElseThrow
- Optional의 인자가 null일 경우, 값을 반환시키는게 아닌 예외처리를 일으킨다.
- JPA의 findById에서 주로 사용한다.
User user = userRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("user doesn't exist");
Share article