DAY39 TIL (Optional)

Colleen·2023년 2월 23일
0
post-thumbnail

Optional

spring boot 를 사용하면서 자주 쓰게 되는 클래스 였다. 안다기 보다는 다들 사용하니 나도 따라서 사용해본 클래스였다. 그래서 이해를 해야 코드를 쓰는 내 입장에서는 알아보는 게 필수였다.

  • Optional 클래스는 자바8 부터 null값에 대한 처리를 더 깔끔하게 하기 위해 추가 된 클래스이다. (가독성을 위해서라나 뭐라나.. )
  • null값일수도 잇는 어떤 변수도 Optional클래스로 wrapping한다고 생각하면 된다.

Example

유저 객체를 조회 했을 때, 있을 때와 없을 때를 나누어 예외 처리를 할 수 있다.

public StatusResponseDto<String> likeComment(Long id, UserDetailsImpl userDetails) {  
    Comment comment = commentRepository.findById(id).orElseThrow(
    () -> new NullPointerException("존재하지 않는 댓글")
    );  
    Optional<CommentLike> optionalCommentLike = commentLikeRepository.findByCommentAndUser(comment, userDetails.getUser());  
    if (optionalCommentLike.isPresent()) { // 유저가 이미 좋아요를 눌렀을 때  
        commentLikeRepository.deleteById(optionalCommentLike.get().getId());  
        return StatusResponseDto.success("댓글 좋아요 취소");  
    }  
    commentLikeRepository.save(new CommentLike(comment, userDetails.getUser()));  
    return StatusResponseDto.success("댓글 좋아요 성공");  
}

과제를 하면서 썼던 코드를 가져와 보았다. 위의 코드를 보면 Optional로 감싼 CommentLike가 보인다. 아래 그 객체가 존재하는 지를 isPresent로 확인해서 좋아요 취소와 추가를 처리하는 것을 볼 수 있다. (솔직히 이 객체가 없었으면... 코드 줄이 길어 졌겠다 싶은 생각이 든다. )

그 이외 Optional을 사용할때 쓸수 있는 메소드가 다양하다. 아래 링크에 그에 대한 자세한 정보가 있는 링크를 남겨 본다.
https://kih0902.tistory.com/56
내일은 제네릭에 대해서 알아 볼까 한다.

profile
이상한 나라의 개발하는 예대생

0개의 댓글