본문 바로가기
Java

람다식(Lambda expression)

by 토니짱 2022. 9. 30.

JDK1.8부터 추가된 람다식을 알아보자!

람다식의 도입으로 인해, 자바는 객체지향 언어인 동시에 함수형 언어가 되었다.

 

람다식이란?

메서드를 하나의 '식(expression)'으로 표현한 것

메서드를 람다식으로 표현하면 메서드의 이름과 반환 값이 없어지므로, 람다식을 '익명 함수(anonymous function)'이라고도 한다.

int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1); //이게 바로 람다식이다.

람다식은 메서드의 매개변수로 전달되는 것이 가능하고, 메서드의 결과로 반환될 수도 있다.

람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해진 것이다.

 

메서드와 함수의 차이가 뭐야?

근본적으로 동일하다만 함수는 일반적 용어, 메서드는 객체지향 개념 용어이다.

메서드는 특정 클래스에 반드시 속해야 한다는 제약이 있기 때문에 기존의 함수와 다른 용어를 선택한 것이다.

함수는 클래스에 독립적 , 메서드는 클래스에 종속적

 

람다식 만들기

1. 이름, 반환 타입 제거

2, 매개변수 선언부와 몸통{} 사이에 -> 추가하기

 

*반환 값이 있는 메서드라면 return 대신 '식'으로 대신할 수 있다.

이때는 문장이 아닌 식이므로 끝에 ';'를 붙이지 않는다.

(int a, int b) -> { return a > b ? a : b; }

//return , ';' 제거
(int a, int b) -> a > b ? a : b

 

*매개변수의 타입은 추론이 가능한 경우 생략할 수 있다.

(int a, int b) -> a > b ? a : b

//매개변수 생략
(a, b) -> a > b ? a : b

 

*매개변수가 하나뿐인 경우라면 괄호를 생략할 수 있다. 그러나 매개변수가 타입이 있으면 괄호 필수

(a) -> a*a
a -> a*a       //()생략가능

(int a) -> a*a
int a -> a*a   //생략 불가

마찬가지로 괄호{} 안에 문장이 하나일 때는 {}도 생략이 가능하나 마지막에 ';'를 붙이지 말아야 한다.

반응형

'Java' 카테고리의 다른 글

java.lang패키지와 유용한 클래스  (0) 2022.09.03
예외처리  (0) 2022.08.17
객체지향프로그래밍2  (0) 2022.08.17
객체지향 프로그래밍1  (0) 2022.08.17