:- 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.
: 람다 표현식에 이름은 없지만 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.
: 람다의 특징
•
익명
◦
보통의 메서드와 달리 이름이 없으므로 익명이라고 표현한다. 함수의 이름을 내부 구현 맥락으로 대체하므로 작명에 대한 고민을 할 필요가 없다.
•
함수
◦
람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 반환 형식, 가능한 예외 리스트를 포함한다.
•
전달
◦
람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.
•
간결성
◦
익명 클래스처럼 많은 자질구레한 코드를 일일이 구현할 필요가 없다.
•
람다라는 용어는 람다 미적분학 학계에서 개발한 시스템에서 유래했다. 람다 표현식이 왜 중요할까?, 기존의 방식에선 코드를 파라미터화하여 전달하는 과정에서 자질구레한 코드가 많이 생긴다.
•
람다로 이 문제를 해결할 수 있다. 즉 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있다. 람다가 기술적으로 자바 8 이전에는 불가능했던 일들을 제공하는 것은 아니다.
•
다만 동작 파라미터를 이용할 때 익명 클래스 등 판에 박힌 코드를 구현할 필요가 없게 만들어준 것, 람다 표현식을 사용하면 더 쉽게 코드를 구현하고 사용할 수 있다. 즉 코드가 간결해지고 유연해진다.
•
람다 표현식은 파라미터, 화살표, 바디 세 부분으로 이루어진다.
: 다음은 자바 8에서 지원하는 람다 표현식의 5가지 예이다.
(String s) -> s.length() // String 형식의 파라미터를 받으며, int 반환 람다 표현식에는 return 문이 함축되어있어서 명시하지 않아도 된다.
(Apple a) -> a.getWeight() > 150 // Apple 형식의 파라미터를 받으며, boolean 반환
(int x, int y) -> {
System.out.println("Result : ");
System.out.println(x+y);
}
// int 형식의 파라미터 두 개를 가지며 리턴 값이 없다.
() -> 42 // 파라미터가 없으며 42를 반환한다.
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
Java
복사
: 다음은 표현식 스타일 람다라고 알려진 람다의 기본 문법이다. (parameters) → expression, 또는 다음처럼 블록 스타일로 표현할 수 있다. (parameters) → { statements; }
: 표현식 스타일은 반드시 표현식을 사용해야 한다. 이처럼 블록 스타일은 반드시 블록을 사용해야 한다.