Lambda , 람다 표현식
이번에는 람다에 대해서 알아보려고 합니다.
람다를 많이 사용하는 만큼! 열심히 알아보도록 하겠습니다.
1. 람다란?
2. 람다의 특징
람다란?
람다란 무엇일까요?? 그것은 바로 바로
람다 표현식은 Java에서 익명(이름 없는) 함수를 정의하는 간단한 방법입니다. 기능적 프로그래밍에서 표현적인 구문을 제공하여
코드를 더 간결하고 읽기 쉬운 방식으로 작성할 수 있는 방법입니다.
- Chat Gpt-
여기서 중요한 점은 람다는 자바 이름이 없는 함수를 정의하는 간단한 방법입니다.
람다 표현식은 (인자 리스트) -> { 바디 }로 표현할 수 있습니다.
람다의 인자 리스트는 0개 이상 가질 수 있으며 타입은 생략 가능하며, 컴파일러가 추론 또는 명시할 수 있습니다.
- 인자가 없을 경우 - ()
- 인자가 하나일 경우 - (인자) 또는 인자
- 인자가 두 개일 경우 - (인자 1, 인자 2)
- 매개변수의 타입은 명시적으로 선언되거나 컴파일러에 의해 추론될 수 있습니다 (String 인자 1 , Integer 인자 2)
바디는 화살표 오른쪽에 함수 본문을 정의하고 여러 줄인 경우에는 {}로 묶습니다.
한 줄인 경우에는 생략 가능하고 return도 생략 가능합니다.
람다의 특징
람다의 특징은 로컬 클래스나 익명 클래스와 달리 쉐도잉 하지 않는 것입니다.
먼저 쉐도잉이란 무엇일까?
Java Shadowing은 변수 이름이 중복되는 경우, 상위 레벨에서 정의된 변수를 가려버리는 현상을 말합니다.
이를 한국어로 "자바 쉐도잉"이라고 번역할 수 있습니다.
-Chat Gpt-
상위 레벨에서 정의된 변수가 하위 레벨에서 정의될 때 가려지는 현상이다.
이것을 코드를 통해 알아보면
public class LambdaTest {
@Test
public void testLambda() {
run();
}
private void run() {
final int variableNumber = 10;
//로컬 클래스
class LocalClass {
void printNumber() {
int variableNumber = 12; //익명 클래스
System.out.println(variableNumber);
}
}
//익명 클래스
Consumer<Integer> integerConsumer = new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
int variableNumber = integer;
System.out.println(variableNumber);
}
};
//람다
IntConsumer printInt = (i) -> {
int variableNumber = i;
System.out.println(variableNumber);
};
LocalClass localClass = new LocalClass();
localClass.printNumber();
integerConsumer.accept(20);
}
}
해당 코드를 보면
로컬 클래스, 익명 클래스, 람다에서 상위 정의된 variableNumber를 하위에서 다시 정의했다.
로컬 클래스와 익명클래스는 정상적으로 작동하지만 람다에서는 컴파일 에러가 난다.
컴파일에러가 나는 걸 살펴보면
Variable 'variableNumber' is already defined in the scope
이미 같은 스코프에서 정의되었다는 것이다.
이게 람다의 특징이다.
우리는 다른 스코프로 보이지만 상위와 람다는 같은 스코프인 것이다. 그래서 쉐도잉이 일어나지 않는다.
이번에는 람다에 대해서 알아보았습니다.
람다는 간결하게 코드를 작성할 수 있어 이전에도 앞으로도 많이 이용하려고 합니다.
감사합니다.
출처 : 백기선 더 자바, Java 8
https://www.inflearn.com/course/the-java-java8/dashboard
더 자바, Java 8 - 인프런 | 강의
자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이
www.inflearn.com