인프런 커뮤니티 질문&답변

falsystack님의 프로필 이미지
falsystack

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

JdbcTemplate 적용3 - 구성과 실행

RowMapper<Item> 질문있습니다.

작성

·

466

·

수정됨

0

수업에 나오는 RowMapper<Item>에 대해서 질문드립니다.

RowMapper의 코드를 확인해보니

@FunctionalInterface
public interface RowMapper<T> {

	/**
	 * Implementations must implement this method to map each row of data
	 * in the ResultSet. This method should not call {@code next()} on
	 * the ResultSet; it is only supposed to map values of the current row.
	 * @param rs the ResultSet to map (pre-initialized for the current row)
	 * @param rowNum the number of the current row
	 * @return the result object for the current row (may be {@code null})
	 * @throws SQLException if an SQLException is encountered getting
	 * column values (that is, there's no need to catch SQLException)
	 */
	@Nullable
	T mapRow(ResultSet rs, int rowNum) throws SQLException;

}

강의에서 구현한 (rs, rowNum) => T 의 메서드가 보이는데요 해당 메서드는 throws SQLException, 즉 체크 예외를 던지고있습니다. 검색해본결과 람다는 컴파일타임이 아니라 런타임에 실행되기 때문에 사용하는측에서 컴파일시점에 예외체크를 하지않아도 컴파일이 통가된다라고 보았습니다. (throws SQLException 라고 적혀있는데 컴파일타임에 체크되어야하는거 아닌가 라고 생각은 하면서)

 

질문

그렇다면 제가 jdbc의 RowMapper를 실무에서 사용한다면 매번 체크 예외를 위한 예외처리를 매번 다 해줘야한다는 의미인가요?

답변 2

1

안녕하세요, 인프런 AI 인턴이에요.

RowMapper 인터페이스의 mapRow 메서드에서 SQLException을 던지는 이유는 다음과 같아요. RowMapper는 ResultSet에서 데이터를 매핑하는 역할을 합니다. 이때, ResultSet에서 데이터를 가져오는 과정에서 SQLException이 발생할 수 있기 때문에 해당 예외를 처리하기 위해서 SQLException을 던지도록 설계되어 있습니다.

람다식을 사용한 경우에도 SQLException은 컴파일 타임에 확인되는 것이 맞습니다. 그러나 RowMapper 인터페이스는 자바 8 이전에 도입되었기 때문에 람다식이 아닌 이전 방식으로 사용할 경우에는 SQLException을 던져야 합니다.

실무에서는 RowMapper를 구현할 때 SQLException을 던지도록 할 필요가 있습니다. SQLException을 catch하지 않으면 컴파일 에러가 발생하기 때문에 예외 처리를 해주어야 합니다. 일반적으로 SQLException은 DB 연결이나 쿼리 수행과 관련된 예외이므로, 예외 처리를 통해 적절한 대응을 할 수 있습니다.

따라서, jdbc의 RowMapper를 실무에서 사용할 때에는 SQLException을 처리하는 코드를 작성해야 합니다.

더 궁금한 내용이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

0

복잡하게 거치지만 결국 catch로 SQLException잡고 다시 언체크드 예외로 던지네요 :)

falsystack님의 프로필 이미지
falsystack

작성한 질문수

질문하기