더북(TheBook)

3.4.1 람다 표현식 문법


3.3.2 Comparator 인터페이스에서 다룬 정렬 예제를 다시 고찰해 보자. 문자열을 길이로 정렬하려고 한 문자열이 다른 문자열보다 짧은지 검사하는 코드를 전달한다. 즉, 다음과 같이 계산한다.

first.length() - second.length()


firstsecond는 무엇일까? 둘 다 문자열이다. 자바는 타입 결합이 강한 언어이므로 다음과 같이 타입도 명시해야 한다.

(String first, String second) -> first.length() - second.length()


방금 첫 번째 람다 표현식을 보았다. 람다 표현식은 쉽게 말해 코드 블록으로, 해당 코드에 전달해야 하는 변수의 명세(specification)까지 갖춘 것이다.

그런데 왜 람다일까? 오래 전 컴퓨터가 없던 시절에 논리학자 알론조 처치(Alonzo Church)는 수학 함수를 효과적으로 계산하는 방법을 공식화하려고 했다(함수의 존재는 알았지만, 흥미롭게도 함수 값을 계산하는 방법은 아무도 모르는 상황이었다). 알론조 처치는 다음과 같이 그리스 문자 람다(λ)로 매개변수를 표기했다.

λfirst. λsecond. first.length() - second.length()


Note ≣

λ 문자일까? 다른 알파벳 문자를 다 써 버려서 그랬을까? 사실은 공신력 있는 책인 <수학 원리(Principia Mathematica)>에서 함수 매개변수를 나타내는 데 악센트 ^를 사용했다(http://plato.stanford.edu/entries/principia-mathematica 참고). 알론조 처치는 여기서 영감을 얻어 대문자 람다 Λ를 사용했고, 나중에 소문자 람다 λ로 바꾸었다. 그 이후로 매개변수가 있는 표현식을 람다 표현식이라고 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.