상세 컨텐츠

본문 제목

JAVA 13-1. 람다식(Lambda Expressions)

Backend/JAVA-자바

by 사랑짱 2021. 6. 28. 14:51

본문

 

◆ 람다식(Lambda Expressions)

- 익명 함수(anonymous function)을 생성하기 위한 식

 

※ 람다식을 이용함으로써 매개변수를 가진 코드 블록(추상메소드)를

    구현하여 익명 구현 객체를 생성한다!!!

 

 

◆ 람다식(Lambda Expressions)의 장점

-  코드가 매우 간결해진다 (간결한 실행문에 적용하자!!).

- 컬렉션 요소(대용량 데이터)를 필터링 또는 맵핑하여 집계하는 데 수월해진다.

- 람다식을 함수적 인터페이스(Functional Interface)의 익명 구현 객체로 취급한다.

 

타겟 타입이란?

- 람다식이 구현할 함수적 인터페이스 => "타겟 타입"

   (대입되는 인터페이스(타겟타입)에 따라 구현 내용이 달라진다!!)

 

※ 함수적 인터페이스란?

- 오직 단 하나의 추상 메소드를 가진 인터페이스

- @FunctionalInterface  어노테이션이 붙어있는 인터페이스(안 붙어있을 수도 있다!)

- 인터페이스에 올 수 있는 멤버 4가지 중에, 추상메소드 이외에 나머지 멤버는 영향을 주지 않는다!

 

 

◆ 람다식 기본 문법

 

 

- Lvalue : 타겟타입의 인터페이스

- Rvalue : ( 매개변수 ) -> { 실행내용 } ;

 

 

- 소괄호 ( ) : 추상메소드의 매개변수(개수, 타입 동일) 선언블록

- 중괄호 { } : 추상메소드의 실행블록(구현부)

 

 

◆ 람다식 작성방법 및 생략조건

 

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

 

2) 매개변수가 있는 람다식

 

3) 리턴값이 있는 람다식

 

※ 람다식 작성 시 생략 조건

<전제조건>

- 타겟타입의 추상메소드의 시그니처를 알고 있어야 한다!!!

 

- 런타임 시 매개변수의 타입은 대입값에 따라 타입추론하기 때문에 생략 OK

- 하나의 매개 변수만 있을 경우 소괄호( ) 생략 OK

- 하나의 실행문만 있는 경우 중괄호{ } 생략 OK

- 중괄호{ }에 return문만 있는 경우 생략 OK

- 매개변수가 없더라도 소괄호(  ) 생략 불가

 

 

클래스 멤버와 로컬변수 사용

 

<클래스의 멤버 사용>

- 람다식 실행블록에는 클래스의 멤버인 필드와 메소드를 제약 없이 사용가능

- 람다식 실행블록 내에서 "this"는 람다식을 실행한 객체(클래스)의 참조

  (따라서, 람다식 내 'this'는 람다식이 만들어내는 '익명구현객체'의 주소를 가리키지 못한다!!)

 

 

 

<로컬 변수 사용>

- 람다식은 함수적 인터페이스의 익명 구현 객체 생성

- 람다식에서 사용하는 외부 로컬 변수는 final 특성

 

 

 

관련글 더보기