자바 람다(Lambda)란? - 1부 개념 이해하기
자바 람다(Lambda)란? 개념부터 쉽게 이해하기
안녕하세요!
이번 글에서는 Java를 공부하다 보면 한 번쯤 만나게 되는 람다(Lambda Expression)에 대해 정리해 보려고 합니다.
처음 람다를 접하면 -> 화살표 문법이 조금 낯설게 느껴질 수 있습니다. 저도 처음에는 "왜 이렇게 작성하지?"라는 생각이 들었지만, 익숙해지고 나니 코드가 훨씬 간결해지고 읽기 쉬워지는 경우가 많았습니다.
이번 글에서는 람다가 무엇인지, 왜 사용하는지, 그리고 실무에서는 어떤 형태로 자주 활용되는지 예제와 함께 살펴보겠습니다.
1. 람다(Lambda)란?
람다는 흔히 '이름이 없는 함수(익명 함수)'라고 많이 설명합니다.
엄밀하게 말하면 자바에서는 독립적인 함수를 만드는 것이 아니라, 함수형 인터페이스(Functional Interface)를 간결하게 구현하는 문법입니다.
처음에는 "메서드를 짧게 표현하는 문법" 정도로 이해해도 충분합니다.
왜 사용할까요?
반복되는 코드가 줄어듭니다.
익명 클래스를 간결하게 작성할 수 있습니다.
Stream API와 함께 사용할 때 가독성이 좋아집니다.
함수형 프로그래밍 스타일의 코드를 작성할 수 있습니다.
2. 익명 클래스와 비교해보기
숫자 두 개를 더하는 기능을 가진 인터페이스가 있다고 가정해 보겠습니다.
기존 방식 (익명 클래스)
@FunctionalInterface
interface Calculator {
int sum(int a, int b);
}
Calculator cal = new Calculator() {
@Override
public int sum(int a, int b) {
return a + b;
}
};람다를 사용한 방식
Calculator cal = (a, b) -> a + b;구현해야 할 메서드가 하나뿐이라면 필요한 동작만 간결하게 표현할 수 있습니다.
(a, b)는 입력받을 값(파라미터)이고, -> 뒤는 실제 실행할 코드입니다.
3. 함수형 인터페이스란?
람다는 모든 인터페이스에서 사용할 수 있는 것은 아닙니다.
추상 메서드가 하나만 존재하는 함수형 인터페이스에서만 사용할 수 있습니다.
@FunctionalInterface
interface Calculator {
int sum(int a, int b);
}@FunctionalInterface는 "이 인터페이스에는 추상 메서드가 하나만 있어야 한다."는 것을 컴파일러가 검사하도록 도와주는 어노테이션입니다.
만약 추상 메서드가 두 개 이상이라면, 컴파일러는 람다가 어떤 메서드를 구현하려는 것인지 판단할 수 없어 오류가 발생합니다.
다음 2편에서는
람다 변환 공식
생략 가능한 문법
타입 추론
Consumer / Supplier / Function / Predicate
내용을 다루겠습니다.
