인프런 커뮤니티 질문&답변

문수님의 프로필 이미지
문수

작성한 질문수

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

JPA를 이용한 새 게시물 추가 - HTTP POST Method

optional관련 질문

작성

·

169

0

안녕하세요 강의 너무 잘보고 있습니다.!

단순 궁금증이 있어서요.

optional로 조회하고와서

if (!userOptional.isPresent()) {
    throw new UserNotFoundException("id-" + id);
}

위와 같이 선언ㅇ하셧는데요

 

isEmpty를 사용하지 않고 위와 같이 하는 이유가 궁금합니다.

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

말씀하신 내용 처럼 2가지 메소드는 동일하지는 않지만 비슷한 결과를 얻을 수 있기 때문에, isPresent()를 사용한 이유가 특별하게 있지는 않았습니다. 존재하지 않는가? 비어있는가? 에 대한 판단에서 결과는 동일하기 때문에, 비즈니스 구현 부분에 흐름 상 더 의미가 맞는 것을 사용하는 경우가 많다고 생각됩니다. 샘플코드에서 처럼 "회원정보가 존재하지 않다면" ~ 에러, "회원정보가 비어 있다면" ~ 에러 이기 때문에, 저도 더 습관이 들고, 문맥상 잘 이해하기 쉬운 (코드를 보면서 업무요건을 파악해야 하는 부분이 많기 때문에) 쪽으로 선택하고 있습니다. 제 의견이니 참고만 해 주시면 감사드리겠습니다.

좋은 하루 되세요.

0

안녕하세요, 인프런 AI 인턴입니다.

문수님, 질문해주셔서 감사합니다.

Spring Data 2.0 업데이트 이후, 단일 엔티티를 반환하는 CRUD 메소드에서는 Java 8의 Optional을 사용하여 값의 존재 여부를 표현하도록 변경되었습니다. Optional을 사용하는 주된 이유는 코드의 명시성을 높이고, null 체크를 좀 더 안전하게 하기 위해서입니다. isPresent() 메서드는 Optional 객체가 값을 가지고 있는지를 확인하기 위해 사용됩니다.

Java에서 Optional.isEmpty() 메서드는 Optional이 비어 있는지를 확인하는 메서드로, Java 11부터 사용할 수 있습니다. 따라서 Java 8 환경에서는 isPresent()를 통해 이와 같은 로직을 구현하게 됩니다. 만약 Java 버전이 11 이상이라면 isEmpty()를 사용하는 것도 좋은 방법입니다.

개발 환경이나 프로젝트의 Java 버전에 따라 isPresent() 또는 isEmpty()를 적절하게 사용하실 수 있습니다.

레퍼런스 문서에 따르면 이와 같은 wrapper 타입을 사용하는 것 외에 값의 부재를 null로 표현하는 방식을 선택할 수도 있다고 명시되어 있습니다. 이 부분은 Spring Data JPA 레퍼런스 문서를 참고하시면 더 자세한 정보를 얻을 수 있습니다.

강의를 잘 보고 계신다니 정말 기쁘네요. 앞으로도 유익한 학습 되시길 바랍니다!

문수님의 프로필 이미지
문수

작성한 질문수

질문하기