JdbcTemplateItemRepositoryV1 질문
안녕하세요.저도 동일한 내용이 궁금했어서, 제가 찾아보고 이해한 내용 공유드려요.질문에 대한 답은 3번에 있는데 만약 3번이 바로 이해가 안가시면 1,2번을 순서대로 읽으시면 이해하실 수 있을 거예요. 1. 람다 개념 이해우선은 내용을 이해하기 위해 '익명 클래스와 람다'의 기본 개념을 알아야 합니다.저는 아래 페이지 내용이 이해하기 쉬웠어요![자바 무료 강의] [심화] 익명 클래스와 람다 - 코드라떼 (codelatte.io)이 내용을 읽고 "람다 표현식은 인터페이스의 추상메소드를 오버라이드하여 구현하는 것이다."를 이해하시면 될 것 같아요. 2. 람다 표현식이 적용되지 않은 예제로 이해 jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection con) throws SQLException { PreparedStatement pstmt = con.prepareStatement("..."); pstmt.setString(1, member.getEmail()); pstmt.setString(2, member.getPassword()); pstmt.setString(3, member.getName()); return pstmt; } });이 코드를 보고 아래 내용을 이해할 수 있으면 됩니다.jdbcTemplate.update함수는 PreparedStatementCreator타입을 파라미터로 가진다. (JdbcTemplate.class에서도 확인 가능합니다.)PreparedStatementCreator 의 createPreparedStatement 추상 메소드를 오버라이드하여 jdbcTemplate.update의 파라미터로 전달하고 있는 것이다.createPreparedStatement 추상 메소드의 파라미터가 Connection이다.위 코드를 람다 표현식으로 구현한 것이 강의 예제(아래 코드)이다. template.update(connection -> { //자동 증가 키 PreparedStatement ps = connection.prepareStatement(sql, new String[]{"id"}); ps.setString(1, item.getItemName()); ps.setInt(2, item.getPrice()); ps.setInt(3, item.getQuantity()); return ps; }, keyHolder); 3. connection 파라미터가 어디서 전달되는지 JdbcTemplate.class에서 확인template.update 함수를 타고 들어가면 람다 표현식을 통해 전달받은 psc 파라미터가 execute() 함수로 전달되는 것을 확인 가능합니다.@Override public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) throws DataAccessException { ... return updateCount(execute(psc, ps -> {execute() 함수로 들어가면 psc를 전달받아 createPreparedStatement() 함수를 실행하는데, 이 때 connection을 파라미터로 넘겨주는 부분을 확인 가능합니다!@Nullable private T execute(PreparedStatementCreator psc, PreparedStatementCallback action, boolean closeResources) throws DataAccessException { ... Connection con = DataSourceUtils.getConnection(obtainDataSource()); PreparedStatement ps = null; try { ps = psc.createPreparedStatement(con); // 여기!이 위치에서 예제에서 구현한 람다 표현식이 실행됩니다. 도움이 되길 바랍니다. 😃