IT/JAVA

Java Section 17 : 람다식

_KH_ 2025. 1. 24. 09:11

[람다식]

: 함수의 이름이 없는 익명 함수를 만들기 위한 표현식

-> 식별자 없이 실행 가능한 함수

 

[람다식 문법]

- 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현함.

- 문법이 간결해지고 원하는 결과를 쉽게 집계할 수 있다.

- 매개변수 자료형을 생략할 수 있으며, 매개 변수가 한 개인 경우에는 소괄호도 생략할 수 있다. (두 개 이상일 경우에는 불가능)

- 구현 내용이 한 문장이거나 return이 없다면 (void) 구현부에 있는 중괄호{ }도 생략 가능

-> 함수의 내용이 두 문장 이상이거나 return 타입이 있으면 생략 불가능

- 중괄호 안의 구현 코드가 return문만 존재하면 중괄호, return 모두 생략 가능

 

※ 원래 메서드

int add(int x, int y) {
	return x + y;
}

 

※ 람다식

(x, y) → {return x + y;}

 

[함수형 인터페이스]

: 오직 하나의 추상 메서드가 선언된 인터페이스만이 람다식의 타겟 타입이 됨.

- 람다식은 인터페이스를 사용할 때 번거로운 과정을 생략할 수 있으나, 하나의 기능(메서드)만을 정의할 수 있다.

- 모든 인터페이스를 람다식의 타겟 타입으로 사용할 수 없다.

public interface Calc {
	int add(int x, int y);
}

 

@ FunctionalInterface : 함수형 인터페이스라는 의미. 메서드를 2개 이상 선언하면 문법적으로 오류를 발생시킴

 

[람다식과 외부변수]

- 람다식 내부에서 지역변수를 사용하려면 그 지역변수는 final로 선언되어야 한다.

-> JDK 1.8 이후로는 final 키워드를 쓰지 않아도 알아서 final 변수로 인정해주는 effective final 기능 지원

- 'variable capture' : 람다식 내부에서 지역변수를 사용할 경우, 복사해 사용하므로 값을 그대로 사용하는 것은 가능하지만 수정이 불가함