람다식(Lamdba expression)
JDK 1.8(자바 8버전) 이후에 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 되게 해줬다.
기존의 자바를 거의 변경하지 않으면서 함수형 언어의 장점을 잘 접목시키는 데 성공하였다.
람다식은 간단히 말해서 메서드를 하나의 '식(Expression)'으로 표현한 것이고, 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줬다.
이러한 람다의 특징 때문에 메서드를 람다식으로 표현하면 메서드 이름과 반환 값이 없어지므로, 람다식을 익명 함수(anonymous function)이라고도 한다.
특징
메서드를 사용하기 위해서는 클래스를 만들어야 하고, 그 클래스 내부에 메서드를 선언한다. 그리고 그 만들어진 클래스의 인스턴스를 생성하고(new) 변수.method() 방식으로 메서드를 사용한다.
람다는 위의 과정 없이 람다식 자체만으로도 메서드의 역할을 대신할 수 있다.
메서드의 매개변수로 전달되는 것이 가능하고(일급 객체), 메서드의 결과로 반환될 수도 있다.
람다식 예제
람다식은 '익명 함수'답게 메서드에 이름과 반환 타입을 제거하고 매개변수 선언부()와 몸통{} 사이에 ->를 추가해서 만든다.
메서드 | 람다식 |
int sum (int a , int b) { return a + b; } |
(int a, int b) -> {return a + b;} |
(int a, int b) -> a + b | |
(a, b) -> a + b | |
void print(String name, int i) { System,out.println(name+"="+i); } |
(String name, int i) - > { System,out.println(name+"="+i); } |
(name, i) -> { System,out.println(name+"="+i); } | |
(name, i) -> System,out.println(name+"="+i) | |
int pow(int x){ return x * x; } |
(int x) -> x * x |
(x) -> x * x | |
x -> x * x | |
int roll() { return (int) (Math.random() * 5); } |
() -> {return (int) (Math.random() * 5);} () -> (int) (Math.random() * 5) |
람다는 위의 표와 같이 표현한다. 아래와 같은 몇 가지 표현의 특징이 있다.
1. 반환 값이 있는 메서드의 경우, return문 내신 '식(expression)'으로 대신할 수 있다. 식으로 표현 시 세미콜론(;)은 붙이지 않는다.
2. 매개변수 중 어느 하나의 타입만 생략하는 건 허용되지 않는다. ex) (String a, b)
3. 매개변수가 하나뿐인 경우 괄호()를 생략할 수 있다. 단, 매개변수의 타입이 있으면 생략할 수 없다.
4. 괄호{} 안의 문장이 하나일 때는 괄호{}를 생략할 수 있다. 이때도 세미콜론(;)은 같이 생략한다.
-> 람다식(Lambda) 정리하기 (2. 함수형 인터페이스) 바로가기 : tosuccess.tistory.com/181
[개인 공부를 위한 정리입니다. 참고용으로만 활용하세요]
Reference
Java의 정석 (남궁 성 지음)
'프로그래밍 언어 > JAVA(자바)' 카테고리의 다른 글
[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 응용) (0) | 2021.04.15 |
---|---|
[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 기본) (0) | 2021.04.12 |
[자바/java] 효율적인 배열 복사 System.arrayCopy (0) | 2020.09.24 |
[자바/java] 이차원 배열 90도 회전시키기, int[][] rotate (0) | 2020.09.09 |
[자바/java] 이차원 배열 클론, Clone(), Object.Clone() (0) | 2020.09.09 |