Search
🕓

#람다 표현식

개요

람다 표현식은 자바 8에서 도입된 기능으로, 간결한 방식으로 메소드를 표현할 수 있게 해준다. 기본적으로 람다 표현식은 익명 함수(이름이 없는 함수)를 정의하는데 사용된다. 람다는 단 하나의 추상 메소드를 가진 인터페이스, 즉 함수형 인터페이스와 함께 사용된다.

람다 표현식의 기본 문법

자바에서 람다식은 [ 매개변수 ] → { 표현식 } 구문을 사용하여 작성된다.
람다식은 0개 이상의 매개 변수를 가질 수 있다.
화살표 는 람다식에서 매개 변수와 몸체를 구분한다.
매개 변수의 형식을 명시적으로 선언할 수 있다.
문맥에서 타입을 추정할 수 있다. 즉, int aa와 동일하게 된다. 빈 괄호는 매개변수가 없다는 뜻이다.
단일 매개 변수이고 타입은 유추가 가능한 경우는 괄호를 사용하지 않을 때도 있다.
ex) a → return a*a 와 같이 표현
몸체에 하나 이상의 문장이 있으면 중괄호로 묶는다.
람다 표현식 예제

람다식의 활용

람다 표현식은 함수를 변수로 전달하는 수도 있지만, 실제로는 익명 클래스(Anonymous Class)를 대체하는 데에서 가장 널리 사용되며, 특히 함수형 인터페이스 (Functional Interface)의 구현체를 처리할 때 유용하다. 이는 자바에서는 특별한 유형으로 단 하나의 메소드를 가지고 있는 인터페이스를 일컫는다. 그러므로 일반적으로 표현할 때 하나의 메소드를 위해서 구현해야될 코드가 많았으나, 이러한 특성 때문에 람다 표현식과 밀첩하게 연관이 되어있다.
ActionListener 인터페이스에서의 활용
위와 같이 람다 표현식이 없었다면 actionPerformed의 기능을 사용하기 위해서 Actionlistener의 이름 없는 객체를 생성하고 오버라이딩을 해야 사용할 수 있었다. 하지만 람다표현식의 등장으로 더 간결하고 직관적인 표현이 가능해졌다.
람다 표현식으로 5줄이 필요했던 식을 두 줄로 요약할 수 있게 되었다.
이 식에서 addActionListener를 호출하면서 이 메소드가 ActionListener타입의 매개변수를 요구하기 때문에, 해당 메소드가 함수형 인터페이스를 구현하는 것이라 파악이 가능하고, 람다식으로 요약이 가능하다.
Runnable 인터페이스에서의 활용
해당 예시에서도 마찬가지로 run()메소드를 실행하기 위해서 Runnable 객체가 익명으로 생성이 되었다. 이런 경우에는 람다 표현식으로 요약이 가능하다.
한 줄로 깔끔하게 람다표현식으로 요약이 되었다.
받는 매개변수가 없다면은 ( ) → { 표현식 }으로 요약할 수 있다.
Iterable 인터페이스에서의 활용
람다식의 이용하면 배열의 모든 요소를 출력하는 코드에서 ForEach() 와 같은 부분에서 함수형 프로그래밍을 사용할 수 있다.
forEach구문에 비해서는 조금 더 직관적으로 표현이 되었다.