본문 바로가기
국비학원

[국비지원] KH 정보교육원 36일차 (2/2)

by 도전하는 개발자 2022. 5. 17.

----


람다식
자바 8부터 함수적 프로그래밍 위해 람다식 지원
람다식(Lambda Expressions)을 언어 차원에서 제공
람다 계산법에서 사용된 식을 프로그래밍 언어에 접목
익명 함수(anonymous function)을 생성하기 위한 식

자바에서 람다식을 수용한 이유
코드가 매우 간결해진다.
컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해 쉽게 집계


자바는 람다식을 함수적 인터페이스의 익명 구현 객체로 취급
람다식 →  매개변수를 가진 코드블록 →  익명 구현 객체

어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있음
Runnable runnable = () -> { ... };


**함수적 스타일의 람다식 작성법

(타입 매개변수, ...) -> { 실행문; ... }
(int a) -> { System.out.println(a); }

 

**람다식 생략 조건
매개변수 타입은 런타임시에 대입값 따라 자동 인식하므로 생략 가능
하나의 매개변수만 있을 경우에는 괄호( ) 생략 가능
매개변수 없다면 괄호 ( ) 생략 불가

하나의 실행문만 있다면 중괄호 { } 생략 가능

리턴값이 있는 경우, return 문 사용 
(원래 리턴값이 있는 메소드는 return문 반드시 사용하는거임 (p221 참고))
중괄호 { }에 return 문만 있을 경우, 중괄호 + return 생략 가능

 

*** 람다는 왜 쓰는걸까???
*** 추상메소드는 자식클래스에서 오버라이드로 재정의해줘야한다

1. implemets 하는 자식 클래스를 만들어서 오버라이드로 재정의하고
실행 클래스를 만들어서 재정의된 메소드를 호출한다.

2. 1처럼 하면 클래스가 홍수가 난다!!! 익명구현객체 코딩기법을 활용하자

3. 2도 좋은데 더 간단하게 하자!!! 람다식 생략 조건을 활용하자

 

---

 

함수적 인터페이스 (@FunctionalInterface)

 

모든 인터페이스를 람다식의 타겟으로 삼을 수는 없고,

오로지 하나의 추상메소드만 선언된 인터페이스만이 람다식의 타겟 타입이 될 수 있음

이를 함수적 인터페이스(@FunctionalInterface)라고 한다

 

@FunctionalInterface

 

1. 매개변수와 리턴값이 없는 람다식

 

매개변수와 리턴값이 없는 람다식 - FuntionalInterface
매개변수와 리턴값이 없는 람다식 - 람다식

 

2. 매개변수가 있고 리턴값이 없는 람다식

 

매개변수가 있고 리턴값이 없는 람다식 - FuntionalInterface
매개변수가 있고 리턴값이 없는 람다식 - 람다식

 

 

3. 매개변수도 있고, 리턴타입도 있는 람다식

 

매개변수도 있고, 리턴타입도 있는 람다식 - FunctionalInterface

 

하위 클래스에서 추상메소드 오버라이드 - 클래스 홍수발생!

 

클래스 홍수!

 

매개변수도 있고, 리턴타입도 있는 람다식 - 람다식