티스토리 뷰

 

@FunctionalInterface
public interface RowMapper<T> {

    @Nullable
    T mapRow(ResultSet rs, int rowNum) throws SQLException;

}

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/RowMapper.html

rowNum은 현재 행의 번호를 나타내는 변수인데, 실제로 이 변수를 어떻게 사용해야 하는지에 대한 고민을 해봤지만, 사용처에 대한 명확한 아이디어가 떠오르지 않았다.

그래서 어떤 목적으로 RowMapper를 설계한 것인지 궁금하여 관련된 이슈를 찾아보았다.

 

RowMapper - mapRow method, rowNum does not need to be in the method signature [SPR-3109] #7796

spring framwork lead인 Juergen Hoeller의 주장을 요약하면

  • RowMapper는 사용자가 구현하는 인터페이스이기 때문에 ResultSet만 가지는 메서드를 추가하면 사용자는 두개의 메서드를 오버라이딩 해서 구현해야하며 이전 버전과의 호환성도 손상된다.
  • RowMapper 자체를 구현하고 단순히 rowNum 인수를 무시하는 것은 충분히 쉽습니다.
  • 필요성은 거의 없지만, 예를 들어 매핑된 개체의 일부 위치 속성을 계산할 때 사용할 수 있다.
     단일 메서드만 있는 경우 적은 정보를 제공하기 보다 많은 정보를 제공하는 것이 낫다

 

해당 논의는 2007년도에 진행된 것으로 보이며, 이 당시에는 주로 자바 6을 사용하던 시기였습니다. 
이 당시에는 default 메서드가 아직 도입되지 않았지만, 만약 default 메서드가 이미 도입되어 있었다면 ResultSet만을 가지는 RowMapper가 등장했을지도 모른다는 생각이 듭니다.