본문 바로가기

좋아하는 것_매직IT/26.Java

람다식(Lambda expression) 깔끔하게 정리하기

반응형

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

람다식의 정의

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

int[] arr = new int[10];
Arrays.setAll(arr, (i) -> (int)(Math.random()*10)+1);

위 람다식을 메소드로 나타낸다면 아래와 같다.

int methodExam() {
	return (int)(Math.random()*10) + 1;
}

Java 에서 모든 메서드는 클래스에 포함 되어야하고 클래스도 새로 만들어야하며, 객체도 생성해야 비롯소 methodExam() 함수를 호출할 수 있는 구조인데...
반면에 람다식은 해당 과정없이 오직 람다식 자체만으로도 해당 메서드 역할을 할 수 있어서 간결하고 이해가 쉬운것이 장점이다.

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

결과적으로 람다식으로 인해서 메서드를 변수처럼 다루는 것이 가능해진것으로 보면된다.

 

람다식 작성방법

그럼, 람다식은 어떻게 작성할까?

아래와 같이 메서드에서 이름과 반환타입을 삭제하고 매개변수 선언부와 몸통{} 사이에 "->"(화살표) 를 추가하면된다.

아래는 정의이다.

반환타입 메서드이름(매개변수 선언) {
	문장들...
}

람다식으로 변환하면..

(매개변수선언) -> {
	문장들...
}

 

예를들면, 아래와 같다. 만약 메소드가 아래와 같다면..

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

람다식으로 변환하면 아래와 같다.
참고로, 반환값이 있는 메서드의 경우, return 문 대신 식(expression)  으로 대신 할 수 있고, 식의 연산결과가 자동으로 반환값이 된다.
이때 문장(statement) 이 아닌 "식" 이므로 끝에 ";"(세미콜론) 를 붙이지 않는다.

그리고, 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략 가능하며, 대부분의 경우 생략가능하다고 보면된다.
참고로 람다식에 반환타입이 없는 이유도 항상 추론이 가능하기 때문이다. 

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

여기까지 람다식의 정의와 변환방법을 알아보았다.

오늘의 티스토리는 여기까지고요.
항상 믿고 봐주셔서 감사합니다. 


블로그 요약!


- Java는 람다식을 도입하여 객체지향형과 함수형 언어의 특성을 모두 가짐
- 람다식은 메서드를 하나의 식으로 표현한 것으로, 반환값과 이름이 없음
- 람다식은 익명함수라고도 불리며, 간결하고 이해하기 쉬운 것이 장점
- 람다식은 메서드의 매개변수로 전달되거나 반환값으로 사용될 수 있음
- 람다식을 작성하려면, 메서드에서 이름과 반환타입을 삭제하고 "->"를 추가해야 함
- 반환값이 있는 메서드의 경우, return 대신 식으로 대체 가능
- 람다식에 선언된 매개변수의 타입은 추론 가능한 경우 생략 가능

300x250