[java] 자바 함수형 인터페이스를 사용하여 데이터베이스 연동을 구현하는 방법은 어떻게 되나요?

데이터베이스 연동은 자바 애플리케이션에서 필수적인 부분입니다. 함수형 프로그래밍은 코드를 더 간결하고 유연하게 만들어주는 강력한 접근 방식이며, 자바 8부터는 함수형 인터페이스를 이용하여 데이터베이스 연동을 구현할 수 있습니다.

데이터베이스 연동을 위해 자바의 JDBC(Java Database Connectivity)라이브러리를 사용할 수 있습니다. 이 라이브러리는 데이터베이스에 연결하고 쿼리를 실행하며 결과를 받아오는 기능을 제공합니다.

먼저, 함수형 인터페이스를 정의해야 합니다. JDBC를 사용하여 데이터베이스와 연동할 때는 SQL문을 실행하는 과정을 인터페이스로 추상화할 수 있습니다. 예를 들어, 다음과 같은 DatabaseRunner라는 함수형 인터페이스를 정의할 수 있습니다.

@FunctionalInterface
public interface DatabaseRunner {
    void run(Connection connection) throws SQLException;
}

이제 이 인터페이스를 사용하여 데이터베이스 연동을 구현할 수 있습니다. 예를 들어, SELECT 쿼리를 실행하고 결과를 출력하는 executeQuery 메서드는 다음과 같이 작성할 수 있습니다.

public void executeQuery(String sql, DatabaseRunner runner) {
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        runner.run(connection);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

위의 예제에서 executeQuery 메서드는 데이터베이스 연결을 수행한 후, DatabaseRunner를 이용하여 쿼리를 실행합니다. Connection 객체를 파라미터로 전달하여 함수형 인터페이스 내부에서 실제 쿼리를 실행할 수 있습니다.

실제로 executeQuery 메서드를 호출할 때는 람다식을 사용하여 DatabaseRunner 인터페이스의 구현체를 전달할 수 있습니다. 아래는 SELECT * FROM users 쿼리를 실행하고 결과를 출력하는 예제입니다.

executeQuery("SELECT * FROM users", connection -> {
    try (Statement statement = connection.createStatement();
         ResultSet resultSet = statement.executeQuery(sql)) {
        while (resultSet.next()) {
            System.out.println(resultSet.getString("username"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
});

위의 예제를 통해 자바 함수형 인터페이스를 사용하여 데이터베이스 연동을 구현하는 방법을 알아보았습니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있으며, 함수형 프로그래밍의 장점을 활용할 수 있습니다.