본문 바로가기

카테고리 없음

fastcampus: 실무 프로젝트로 배우는 Kotlin & Spring - Part 4/Ch02/05 Why?

  • 강의 영상: https://fastcampus.app/courses/211160/clips/779521?organizationProductId=13720

09:29 분경

findAllByDoneIsFalse0rderByIdDesc()의 응답이 Optional<List<Todo>> 이다!

코틀린 변경 때 Optional 을 nullable 처리만 해주면 된다고 설명을 한다.

 

근데 findAllBy ~ 이런 다수의 결과를 받는 경우 조회 조건에 해당하는 데이터가 없을 경우 null을 반환하지 않고 빈 컬렉션을 돌려준다.

따라서 해당 쿼리 메서드는 null을 응답 받을 일이 없다.

 

애초에 아래와 같은 코드는 있지도 않을 일에 대해 지나치게 방어적으로 짠 코드라 생각한다.

public interface TodoRepository extends JpaRepository<Todo, Long> {

    Optional<List<Todo>> findAllByDoneIsFalseOrderByIdDesc();
}

디버깅을 해서 응답 데이터를 보면 빈 데이터를 담은 Optional 이 낯설다.

Optional[[]] ?!?!

 

그냥 아래와 같이 짜면 된다.

public interface TodoRepository extends JpaRepository<Todo, Long> {

    List<Todo> findAllByDoneIsFalseOrderByIdDesc();
}

이렇게 하면 그냥 빈 ArrayList 가 돌아온다.

 

또한 코틀린으로 전환한 코드도 List<Todo>? 는 사족이다. 그냥 아래처럼 List<Todo> 반환하면 된다.

interface TodoRepository JpaRepository<Todo, Long> {
	fun findAllByDoneIsFalseOrderByIdDesc() : List<Todo>
}

 

강사는 코틀린으로 전환하면서 Optional로 래핑을 안하니 오버헤드를 절약할 수 있다고 했다.

하지만 이것은 자바에서 불필요하게 Optional로 반환을 받게 처리하는 것 부터가 문제였다고 본다. 코틀린은 아무 죄가 없다..