• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

왜 findByLoginId는 Optional로 반환하나요?

23.02.11 00:56 작성 조회수 422

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요! MemberRepository 코드 중에 findById는 예전 강의에서 스펙상 Member 객체를 반환하는걸로 권고(?)된다고 들었던 것 같은데, 그렇다면 왜 findByLoginIdOptional<Member>로 반환하는건가요?

Optional이 NullPointerException 발생을 줄이기 위해 래퍼 역할을 한다는 것은 알겠는데, 두 메서드의 반환값 차이가 있는 이유가 무엇인지 궁금합니다!

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.02.13

안녕하세요, gyuray 님. 공식 서포터즈 y2gcoder 입니다.

안녕하세요! MemberRepository 코드 중에 findById는 예전 강의에서 스펙상 Member 객체를 반환하는걸로 권고(?)된다고 들었던 것 같은데

먼저 이 부분에 대해서는 어디 부분인지 말씀해주시면 해당 부분을 참고해서 좀 더 정확한 대답을 드릴 수 있을 것 같습니다!

먼저 무엇을 반환하는지는 해당 코드를 개발하는 개발자가 잘 정하는 게 중요하다고 생각합니다. find~()의 반환값을 객체 타입, Optional<타입> 중에 선택하는 것은 개발자가 판단해서 결정할 문제라고 생각합니다. 그보다 중요한 것은 일관성이라고 생각합니다. 만약 처음 find~()의 반환값을 객체 타입으로 바로 반환하는 것을 선택했다면 다른 find~()들도 모두 객체 타입을 반환하도록 해야 한다고 생각합니다. 그래야 협업하는 개발자나 나아가 미래의 개발자 본인에게도 좋지 않을까 조심스럽게 말씀드립니다.

번외로 find~()에 반환값으로 Optional을 줘야 하나, 객체 타입을 줘야 하나에 대해서는 저도 많이 고민했던 문제입니다. 해당 부분에 정답은 없으나 혹시나 도움이 되실까 싶어 제가 판단을 내리기 위해 찾아본 근거들을 밑에 짧게 남겨보겠습니다.

  1. Optional은 만든 의도는 우선 스택오버플로우 답변을 보시면 반환값 없음을 명확하게 표현해주고 싶어서라고 합니다. null로 반환하는 것은 말씀하신 것처럼 문제가 발생할 여지가 많기 때문에 Optional을 통해 보다 명확하고 안전하게 표현해주기 위해 Optional을 사용한다고 저는 이해했습니다.

  2. 'find' 의 뜻

  3. 다른 라이브러리들은 find~()의 반환 타입을 어떻게 해주고 있나? ex) Spring Data JPA

  4. 직접 사용하면서 어떤 게 더 편했나?



감사합니다.

gyuray님의 프로필

gyuray

질문자

2023.02.13

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/unit/49581?category=questionDetail

찾아보니까 위 강의 5분 15초 지점에서 이야기하셨던 걸 제가 기억한 것 같습니다. Repository save 부분이었는데 제가 find랑 헷갈렸던 것 같습니다. 친절한 답변 감사드립니다~!

y2gcoder님의 프로필

y2gcoder

2023.02.13

감사합니다 :)