피드백) 단건조회는 null 반환 가능성이 있어 Optional로 래핑해라

2026. 1. 21. 14:29·코드잇 스프린트/실습

UserRepository를 구성하고 있는데

단건조회는 Null을 반환할 가능성이 있어서 Optional로 래핑해서 반환하고,

서비스에서 예외처리 추가해주는게 좋겠다는 피드백을 받았다.

public interface UserRepository {

    User save(User user); //create와 update를 save로 통합
    User findById(UUID userId);
    List<User> findAll();
    void delete(UUID userId);

}

 

1.Optional이란?

이 값은 없을 수도 있다는 사실을 타입으로 명시하기 위한 컨테이너.

 

즉

User

이건 "반드시 User가 있다" 라는 의미

 

Optional<User>

이건 User가 있을 수도, 없을 수도 있다는 의미.

 

[현재 코드 문제점]

User findById(UUID userId);

"항상 User를 반환한다". 라고 말하고 있는거임.

 

[실제 구현]

User user = data.get(userId); // 없으면 null
return user;

타입과 현실이 불일치 하는 일이 생겨버린다.

 

이렇게 하면 Service쪽에서

User user = userRepository.findById(id);
if (user == null) {
    ...
}

매번 null 체크를 강제받게 된다.

 

[Optional 적용시]

Optional<User> findById(UUID userId);

User가 없을 수도 있으니 호출자는 그 가능성을 고려해라. 라는 말.

 

@Override
public Optional<User> findById(UUID userId) {
    return Optional.ofNullable(data.get(userId));
}

ofNullable

  • 값이 있으면 Optional<User>
  • 값이 없으면 Optional.empty()

[Service쪽 예외 처리]

User user = userRepository.findById(id)
    .orElseThrow(() -> new IllegalArgumentException("유저 없음"));

orElseThrow(...)

Optional이 비어있는 경우 처리.

값이 있으면 그 값을 반환

값이 없으면 예외를 던진다.

'코드잇 스프린트 > 실습' 카테고리의 다른 글

[sprint5] 디스코드 어플리케이션 채널 생성시 NPE 발생  (0) 2026.02.23
BasicUserService내 update 기능 피드백.  (0) 2026.01.29
ReadStatus,UserStatus,BinaryContent 도메인 추가(왜 추가하는거고, 어떤 역할을 하는지?)  (0) 2026.01.28
간단한 디스코드 프로그램 만들기_ 피드백3(매개변수 변경 ,메서드 이관)  (1) 2026.01.15
간단한 디스코드 프로그램 만들기_ 각 필드에 List 추가해서 기능 추가하기.  (0) 2026.01.14
'코드잇 스프린트/실습' 카테고리의 다른 글
  • BasicUserService내 update 기능 피드백.
  • ReadStatus,UserStatus,BinaryContent 도메인 추가(왜 추가하는거고, 어떤 역할을 하는지?)
  • 간단한 디스코드 프로그램 만들기_ 피드백3(매개변수 변경 ,메서드 이관)
  • 간단한 디스코드 프로그램 만들기_ 각 필드에 List 추가해서 기능 추가하기.
과컴
과컴
벡엔드 개발자 최소기준 맞추겠습니다.
  • 과컴
    곽의 프로그램
    과컴
  • 전체
    오늘
    어제
    • 분류 전체보기 (76)
      • 위클리페이퍼 (6)
      • 파이썬 (4)
      • 코드잇 스프린트 (48)
        • Spring 이론 (7)
        • Java이론 (11)
        • 실습 (23)
      • 백엔드 개발자 최소기준 (1)
      • 코딩테스트 (5)
        • 알고리즘 (0)
        • SQL (1)
      • Git (5)
      • 스프링부트 핵심가이드 (1)
      • 트러블 슈팅 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문자열
    혼공파
    백준2576
    백준1075번
    파이썬기초
    백준1152
    파이썬
    파이썬입문
    백준브론즈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
과컴
피드백) 단건조회는 null 반환 가능성이 있어 Optional로 래핑해라
상단으로

티스토리툴바