All Day Tired

Optional 본문

Back/Java

Optional

yu.dev 2024. 9. 19. 13:36

개발하면서 딱히 optional을 써본 적이 없는데

강의 듣다가 optional이 쓰여서 정리해 볼 겸 작성한다.

 

Optional 이란
  • null 값으로 인한 예외를 방지하게 해주는 컨테이너 객체
  • null로 인해 발생하는 예측할 수 없는 결과를 방지하기 위해 사용

 

사용법
  • 보통 ofofNullable을 사용해서 optional 객체를 생성함
Optional<String> str1 = Optional.of("Hello"); //null이 아닌 특정한 값을 return, null이라면 NPE 에러를 냄
Optional<String> str2 = Optional.ofNullable("Hi"); //null이 아닌 특정한 값이 있으면 그 값을 return하고 아니라면 null을 return

 

  • get으로 optional 객체 타입의 값을 가져옴
Optional<String> oStr = Optional.ofNullable("Hello");
String str = oStr.get();//str에는 Hello가 들어감, 값이 있으면 그 값을 return, 아니라면 NoSuchElementException을 발생

 

  • isPresent는 값이 있으면 true를 없으면 false을 return

그런데 isPesent와 get은 optional을 사용할 때 앵간하면 잘 쓰지 않는 편이라고 한다. 다른 메소드로 더 코드를 줄이고 가독성을 높이기 위함이라고 함.

 

  • orElse는 optional에 값이 존재하면 그 값을 return, 아니라면 파라미터의 값을 return
Optional<Member> member = memberRepository.findById(id).orElse(null);

 

  • orElseGet은 orElse와 비슷한데 파라미터가 새로운 객체를 생성하거나 새로운 연산을 수행하는 경우에 쓰인다.
Optional<Member> member = memberRepository.findById(id).orElseGet(() -> new Member());

 

  • orElseThrow는 값이 존재하면 그 값을 return, 아니라면 에러를 throw함
Optional<Member> member = memberRepository.findById(id).orElseThrow(IllegalStateException::new);

 

 

아직까지 쓴 게 많지 않아서 여기까지 정리하고 추후 추가할 내용 있으면 추가하도록 하자...

'Back > Java' 카테고리의 다른 글

람다식, 익명클래스  (0) 2024.12.17
Annotation  (0) 2024.11.26
JDK, JRE, JVM  (0) 2024.10.14
Comments