[72일차] 람다식(Lambda Expression)

저요·2022년 12월 3일

2022 100th day challenge

목록 보기
72/97

서론

stream에 대해 공부하려고 시작하자마자 람다함수.. 이런 단어에 막혀버렸다. 오늘은 그래서 그게 뭔지 알아보려고 한다.

본론

자바는 원래 oop 언어 (객체지향언어) 인데 jdk1.8부터는 함수형 언어를 몇 가지 추가했다. 빅데이터가 부상하면서 그런 어마어마한 양의 데이터를 처리하기 위한 필요 때문이다. 함수형 언어로는 기본적으로 haskell, erlang, scala가 존재하는데 이 기능을 몇가지 자바, python, js같은 객체지향언어에도 추가가 된 것이다.

람다식이란?

그래서 람다식이 무엇인가 하면 함수를 간단한 식으로 표현하기 위한 방법이라고 보면 된다.

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

이같은 메서드를

//람다식은 기본적으로 익명 함수이다.(anonymous function)
(a,b) -> a > b ? a : b

이렇게 바꿀 수 있는 것이다. 이와 같은 표기법은 자바스크립트에서 화살표 함수를 용어를 알고 있던 사람들이라면 익숙할 것이다.

함수와 메서드의 차이

람다함수.. 그리고 메서드? 이 둘의 용어는 매번 헷갈린다. 과연 이 둘의 차이는 무엇인가.

근본적으로 둘은 동일하다고 볼 수 있다. 하지만, 함수는 일반적 용어이고 메서드는 객체지향적 개념의 용어이다. 함수는 클래스에 종속될 필요가 없고 독립적이다. 하지만, 객체지행적 개념의 메서드는 클래스에 종속되어있다. 따라서, 클래스에 종속되어있는, 클래스 안에서만 존재할 수 있는 함수들을 메서드라고 말하는 것이다. 기본적으로 자바에서는 클래스 밖에 존재할 수 없다. 그렇기 때문에 자바에서는 기본적으로 모두 메서드이다.

람다식을 작성하는 방법

  1. 메서드의 이름과 반환타입을 제거하고 '->'를 블록{} 앞에 추가한다.
(int a, int b) -> {
 	return a > b ? a : b ;
 }
  1. 반환값이 있는 경우, 식이나 값만 적고 return 문은 생략 가능하다(끝에 ';' 생략)
(int a, int b) -> a > b ? a : b 
  1. 매개변수의 타입이 추론 가능하면 생략가능하다. (대부분의 경우 생략이 가능하다.)
(a, b) -> a > b ? a : b 

람다식 작성 주의사항

  1. 매개변수가 하나인 경우에는 괄호가 생략이 가능하다. 하지만 타입이 명시하고 있을 경우에는 생략이 불가능하다.
  2. 블록 안 문장이 하나일 때는 괄호가 생략이 가능하다. 이 경우 세미콜론은 붙이면 안된다.

(a, b) -> a > b ? a : b
(name, i) -> System.out.println(name+"="+i)
x -> xx
int test() {
(int)(Math.random()
6);
}
() -> (int)(Math.random()*6)

참고

https://youtu.be/3wnmgM4qK30

profile
웹개발

0개의 댓글