본문 바로가기
개발/Java

람다식(Lambda Expression)

by jeounpar 2023. 7. 15.

람다식(Lambda Expression)

: 함수(메서드)를 간단한 식(expression)으로 표현하는 방법

 

함수 vs 메서드

근본적으로는 같지만, 함수는 클래스에 독립적이고 메서드는 클래스에 종속적이다. (클래스 밖에 메서드를 정의할 수 없다)

함수는 일반적인 용어이고 메서드는 객체지향개념 용어이다.

 

메서드를 람다식으로 바꾸는 방법

int square(int a) {
	return a * a;
}

 

1. 반환타입과 메서드이름을 지운다.

(int a) {
	return a * a;
}

 

2. 매개변수 오른쪽에 화살표( → )를 추가한다

(int a) -> {
	return a * a;
}

 

3. 반환값이 있는 경우, 식이나 값만 적고 return문 생략가능하다. (세미콜론도 생략가능)

(int a) -> {
	a * a
}

 

4. 매개변수의 타입이 추론 가능하면 생략가능하다. (대부분의 경우 생략 가능)

(a) -> {
	a * a
}

 

5. 매개변수가 하나인 경우, 소괄호 () 생략 가능하다.

a -> {
	a * a
}

 

6. 블록 안의 문장이 하나뿐 일 때, 중괄호 {} 생략 가능하다.

a -> a * a

 

람다식은 익명함수?

비슷한 개념이지만, 엄밀히 말하면 약간 다른 의미를 갖는다.

람다식은 익명 함수를 표현하는 자바의 특정 문법적인 형태이고, 익명함수는 함수의 이름이 없는 함수를 일반적으로 가르키는 개념이다.

자바에서 람다식은 익명 함수를 생성하기 위한 방법이다.

* 익명 함수(anonymous function) : 이름이 없는 함수

 

람다식은 익명 객체!

// 아래 두 표현은 같다.

a -> a * a

---

new Object() {
	public int square(int a) {
		return a * a;
	}
}

 

람다식은 (익명)객체라면, 람다식을 다루기 위한 참조변수가 필요한데 참조변수의 타입은 뭐지?

Object obj = new Object() {
	public int square(int a) {
		return a * a;
	}
}
int result = obj.square(2); // error

---

Object obj = a -> a * a;
int result = obj.square(2); // error

Object 클래스에는 square라는 메서드는 존재하지 않기 때문에 에러가 발생한다.

이때, 필요한 것이 함수형 인터페이스이다.

'개발 > Java' 카테고리의 다른 글

함수형 인터페이스(Functional Interface)  (0) 2023.07.16