이 패러다임에서 핵심이 되는 기반은 람다 계산법으로 알론조 처치가 1930년대에 발명했다.
함수형 프로그래밍은 변경되지 않은 데이터, 즉 불변성을 중시하는 프로그래밍 패러다임이다.
1. 정수를 제곱하기
public class Squint {
public static void main(String args[]) {
for (int i = 0; i < 25; i++) { // i는 가변 변수
System.out.println(i * i);
}
}
- 25까지의 정수의 제곱을 출력하는 클로저 코드
(println (take 25 (map (fn [x] (* x x)) (range))))
- println, take, map, range는 함수 → (range) 로 함수를 호출한다.
- range → 0부터 끝이 없는 정수 리스트 반환
- (map (fn (* x x)) …) → 반환된 정수 리스트의 각 요소에 숫자를 제곱하여 끝이 없는 리스트 생성
- (take 25 …) → 제곱된 리스트는 take 함수로 전달되고, 앞 25개만 반환
- println → 결과 출력
자바와 클로저의 차이
- 자바 : 가변 변수를 사용한다.
- 가변 변수는 프로그램 실행 중에 상태가 변할 수 있다.
- 클로저 : 가변 변수가 없다.
- x와 같은 변수가 한 번 초기화 되면 절대로 변하지 않는다.