coco 프로젝트를 진행 중에, return null
을 사용하지 말고, return Optional.empty()
를 사용해보라는 튜터님의 피드백을 받았다.
| Member.java
public Post findPost(Long postId) {
if (postId <= 0) {
return null;
}
for (Post post : posts) {
if (post.getId() == postId) {
return post;
}
}
return null;
}
null
을 반환한다.| PostService.java
Post findPost = member.findPost(postId);
if (findPost == null) {
return new ResponseEntity<>(
PostUpdateResponseDto.builder()
.status(StatusMessage.BAD_REQUEST)
.build(),
HttpStatus.valueOf(StatusCode.BAD_REQUEST)
);
}
| Member.java
public Optional<Post> findPost(Long postId) {
if (postId <= 0) {
return Optional.empty();
}
for (Post post : posts) {
if (post.getId() == postId) {
return Optional.of(post); // -> return Optional.ofNullable(post);
}
}
return Optional.empty();
}
Optional<Post>
※ posts에서 postId와 일치하는 post를 찾으면 Optional.of(post)로 반환하는데, 이를 ofNullable로 변경해야 한다.
of로 반환할 때, post가 null이라면 NullPointerException이 발생한다.
하지만, Nullable로 반환하면, post가 null이어도 NullPointerException이 발생하지 않고 empty객체로 만들어져 반환된다.
| PostService.java
Optional<Post> postOptional = member.findPost(postId);
if (postOptional.isEmpty()) {
return new ResponseEntity<>(
PostUpdateResponseDto.builder().status(StatusMessage.BAD_REQUEST).build(),
HttpStatus.valueOf(StatusCode.BAD_REQUEST)
);
}
Post findPost = postOptional.get();