[인프런워밍업클럽][BE] 과제 3 | Lambda 식
1. 람다식(Lambda Expression) 이란?: 익명함수를 생성하기 위한 식 (Annoymous Function, 익명함수)1.1 람다식의 등장 배경- 복잡한 요구사항을 처리하기 위해 기존 Java 문법으로는 Method 사용이 늘어나는 등 코드의 복잡도가 높아짐- 메소드의 제한적 사용 - 객체를 통한 접근만을 허용 - 메소드 자체를 변수로 사용 불가 1.2 람다식 특징- 익명 함수 : 식별자없이 실행가능한 함수 (메소드명이 없음)- 간결한 문법- 함수형 인터페이스 지원1.3 람다식의 장/단점(1) 장점- 코드의 간결성 : 불필요한 반복문의 삭제 가능- 지연연산 수행 : 불필요한 연산 최소화- 병렬처리 기능 : 멀티쓰레드 활용- 가독성 향상 : 코드가 실제로 수행하고자 하는 로직이 추상적으로 드러남(2) 단점- 호출을 위해 직접 메소드를 불러야 함 : 람다식 생성 및 전달이 간결한 것과는 달리, 람다식 실행 시 인터페이스에 선언된 메소드 호출이 필요- 재귀 람다식 호출의 어려움 2. 람다식의 사용2.1 람다식 기본기본 형태 : 인터페이스 객체 변수명 = (매개변수, ..., 매개변수) -> {함수몸체;}구성요소매개변수 : 메소드 매개변수(parameter)하나일 경우 매개변수 또는 매개변수를 감싸는 () 생략 가능 (둘 다 생략은 안됨)화살표 : 코드 블럭을 실행(호출)메소드 구현부 (함수몸체) : {}함수몸체가 단일 실행문이면 {} 생략 가능단, 함수몸체가 return 문으로만 구성되어 있으면 {} 생략 불가 2.2 람다식 예제(추가 필요) 2.3 람다식 해석(1) 13강. GET API 람다 식 적용 전RowMapper = PreparedStatement + ResultSetJdbcTemplate.query()와 연동하여 사용SQL문의 결과값 각 행을 원하는 자료형으로 변환 : 즉, 각 행의 각 열(column)과 java 코드의 변수를 매핑시켜 줌.아래 코드에서 함수의 흐름은 다음과 같다각각 다음의 형식으로 매핑시킴long id : id bigintString name : name varchar(20)int age : age intreturn 시에는 method에서 반환값을 List<UserResponse>로 정의했으므로 UserResponse 생성자를 이용하여 구성 @GetMapping("/user") public List<UserResponse> getUsers(){ //1. SQL 조회 String sql = "SELECT * FROM users"; //2. JDBC 연결, 처리 return jdbcTemplate.query(sql, new RowMapper<UserResponse>() { @Override public UserResponse mapRow(ResultSet rs, int rowNum) throws SQLException { long id = rs.getLong("id"); String name = rs.getString("name"); int age = rs.getInt("age"); return new UserResponse(id, name, age); } }); } (2) 13강. GET API 람다 식 적용 후람다식 적용전에 비해 짧아졌으며, 중요한 부분 (매핑되는 부분)이 강조되어 보임.람다식매개변수 : rs (=ResultSet), rowNum함수본체 : 각각 java 변수와 sql 결과를 매핑시킴그러나 여전히 rs = ResultSet 이고, RowMapper 인스턴스를 사용한다는 걸 어떻게 인지하는 건지 모르겠음. @GetMapping("/user") public List<UserResponse> getUsers(){ String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, (rs, rowNum) -> { long id = rs.getLong("id"); String name = rs.getString("name"); int age = rs.getInt("age"); return new UserResponse(id, name, age); }); } 참고자료Lambda https://blog.naver.com/hj_kim97/222318922263https://blog.naver.com/it_jh/223356024460https://blog.naver.com/krkarma777/223278551937RowMapperhttps://blog.naver.com/3723578/223258910909https://mincanit.tistory.com/13