inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

optional관련 질문

212

문수

작성한 질문수 5

0

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

단순 궁금증이 있어서요.

optional로 조회하고와서

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

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

 

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

rest-api spring-boot

답변 2

0

Dowon Lee

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

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

좋은 하루 되세요.

0

인프런 AI 인턴

안녕하세요, 인프런 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 레퍼런스 문서를 참고하시면 더 자세한 정보를 얻을 수 있습니다.

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

JPA

0

57

1

jpa dependency를 추가하고 SecurityConfig클래스에서 오류가 납니다.

0

68

1

웹 브라우저 400 bad request

0

70

1

@Size는 되는데 @Past는 안 됩니다.

0

61

1

pdf 자료는 없나요?

0

73

2

locale 정보가 null 이면 무조건 messages_ko.properties이 호출 되는 문제

0

87

2

Swagger 강의, Unable to infer base url 이거 뜨시는 분들 도움되시라고

0

118

1

강의에서나온 화면 피피티

0

158

1

HelloWorldBean 관련 에러

0

183

2

Swagger API 3.x 오류..

0

219

1

java: variable message not initialized in the default constructor 에러는 어찌하면 좋을까요?

1

282

1

현재 GIT에 올리신 소스를 실행해봤습니다.

0

189

2

고양이 소리가 귀엽네요 !!

0

137

2

git에서 소스받고 실습중인데

0

117

1

post가 안되요

0

102

1

한국어 같은 경우 언어코드인 messages_ko.properties 로 생성하는게 더 좋지 않나요?

0

167

2

리턴타입으로서 EntityModel<User> 와 ResponseEntity질문

0

103

1

예외처리쪽 관련 질문있습니다.

0

159

2

엔티티가 바로 응답으로 나가도 되나요??

0

221

2

안녕하세여 Cannot invoke "co.kr.joneconsulting.resfulservice.repository.PostRepository.save(Object)" because "this.postRepository" is null

0

135

2

사용자 등록하고 나서 H2 에서 보면 신규 사용자의 password, ssn 이 null 로 되어 있습니다.

0

140

2

ApplictionContext 질문

0

191

2

롬북이 안먹히는것같아요

0

156

1

인텔리제이에서스프링부트 파일 실행하면

0

240

1