본문 바로가기
Programming/Java

[whiteship 온라인 스터디] 15주차 과제: 람다식

by 읽고 쓰는 개발자 2021. 3. 4.

github.com/whiteship/live-study/issues/15

15주차 과제: 람다식 · Issue #15 · whiteship/live-study

목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 마감일시 2021년 3월 6일 토요일 오후 1시까지.

github.com

목표

자바의 람다식에 대해 학습하세요.

학습할 것 (필수)

  • 람다식 사용법
  • 함수형 인터페이스
  • Variable Capture
  • 메소드, 생성자 레퍼런스

0. 자바의 람다식?

  • 함수적 프로그래밍을 위해 자바8부터 람다식(Lambda Expressions) 지원
  • 람다식은 익명 함수(anonymous function)를 생성하기 위한 식. 객체 지향 언어보다는 함수지향 언어에 가까움
  • 자바 코드개 매우 간결해지고, 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

1. 람다식 사용법

람다식의 형태 : 매개 변수를 가진 코드 블록이지만 런타임시에는 익명 구현 객체를 생성한다. 

 

익명 구현 객체 생성하는 전형적인 코드는 아래와 같다.

Runnable runnable = new Runnable() {
	public void run() {
    	
    }
}

이를 람다식으로 표현하면 아래와 같다.

// 인터페이스의 익명 구현 객체. 즉 여기서는 Runnable의 익명 구현 객체를 생성하는 것 
Runnable runnable = () -> {...} 	

※ (매개변수) -> { 실행코드} 형태로 작성되어 마치 함수 정의 형태인 것처럼 보이지만, 컴파일 후 런타임 시에 인터페이스의 익명 구현 객체로 생성

 

 

 

2. 함수형 인터페이스

 

3. Variable Capture

 

4. 메소드, 생성자 레퍼런스




라이브스터디
익명 내부 클래스는 컴파일 후 class파일 생성, 람다는 아님. 람다는 invokedynamic (indy)
익명 내부 클래스는 쉐도잉 일어나지만, 람다는 람다가 있는 메소드와 스콥이 다르지않다(같다!!!) 즉 쉐도잉 일어나지않음

First class citizen : 함수를 변수에 선언, 함수를 메소드에 전달(파라미터)하고 리턴받을 수 있음