[꼼꼼한 개발자] 꼼코더

[JAVA] - Optional 반환값 사용이유? 간단하고 쉽게 이해하기 본문

간단하고 쉽게/JAVA

[JAVA] - Optional 반환값 사용이유? 간단하고 쉽게 이해하기

꼼코더 2023. 4. 19. 16:38
반응형

🫨 개요

개발 공부 중 JPA 메서드 반환값을 Optional을 반환값으로 사용하는 예제를 봤다.

 

찾아보니 "검색된 엔티티가 없는 경우 NullPointer 예외가 발생할 수 있어.

Optional을 사용하여 null 체크하는 것이 좋다."라는 걸 확인했다"

@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
    Optional<Role> findByName(String name);
}

 

 

그러나 문득 이런 생각이 들었다 "그럼 모든 메소드의 반환값을 널 체크해주면 되지 않을까? 왜 그렇게 하지 않는 걸까?"

그에 관한 답을 찾아 아래에 정리해 보았다.

 


🫗 반환값을 Optional로 하는 경우

일반적으로 메서드의 반환값을 Optional로 해야 하는 경우는 다음과 같다.

  1. 검색 메서드
    • 해당하는 데이터가 없는 경우 null 대신 Optional.empty()를 반환합니다.
  2. 단일 조회 메서드
    • 해당하는 데이터가 없는 경우 null 대신 Optional.empty()를 반환합니다.
  3. 컬렉션 조회 메서드
    • 데이터가 없는 경우 빈 리스트 대신 Optional.empty()를 반환합니다.

 

따라서, 위 3가지 경우에 해당하는 메서드는 반환 타입으로 Optional을 사용하는 것이 좋다.

 

 

😵 반환값을 Optional로 하지 않는 경우

Optional이라는 객체를 생성하고 사용하려면 그만큼의 비용이 발생하기 때문에

데이터베이스 쿼리가 많은 메서드인 경우에는 사용하지 않는 것이 좋다.

 

또한, 반환값이 null이 될 가능성이 있는 경우에는 Optional 대신 null을 반환하는 것이 적절하다.(null과 empty는 다르다)

그러나 null 체크가 번거로운 경우나, 자연스러운 null 처리가 어려운 경우에는 Optional을 사용하는 것이 좋다.

 

그러므로, 모든 메서드의 반환값을 Optional로 하지 않아도 된다.

검색, 단일 조회, 컬렉션 조회와 같이 해당하는 데이터가 없는 경우에는 Optional을 사용하는 것이 좋다.

 

그 외의 경우에는 적절한 방법으로 null을 처리하면 된다.

Comments