JAVA - Optional

choko's avatar
Jun 29, 2024
JAVA - Optional

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");
    • 이 때문에, JpaRepository에서 회원 조회같은 기능은 Optional<User> 등으로 설정하는게 좋다.
 
Share article

Tom의 TIL 정리방