함수형 프로그래밍
ex) SQL, Scala, Clojure
과정Process보다 결과Result 중심.
어떻게How 보다 무엇What을 할 것인가를 표현
데이터는 불변immutable
문제를 함수로 분해Decompose
수학적 함수의 개념에 기반
조건문, 반복문 x
불변하는 데이터 Immutable Data
데이터를 함수 밖에서 변형modify 하지 않음. 함수 반환값Return Value으로 함수 내에서 수행된 작업 반영
부수효과side effect 방지
클로저
순수 함수 Pure function
함수형 프로그래밍의 이상ideal
입력 파라미터에만 의존, 부수효과를 일으키지 않는 함수.
이를 통해 불변하는 데이터의 특징을 가짐. 단순함.
인수arguments와 반환값으로만 환원
정의된 API를 통해서만 외부 시스템과 상호작용하여 결과를 만들어냄.
정해진 입력값을 주면 정해진 반환값을 줌. 부수효과 없음.
일급 객체 함수
실제로는 일급 객체 함수에 의존. 유연하고 유용하게 사용.
변수나 데이터 구조 안에 담을 수 있음
파라미터로 전달 가능
반환 값으로 사용 가능
할당에 사용한 이름과 관계없이 고유한 구별 가능
동적으로 property 할당 가능
유지 관리 가능성
모듈화
생산성 증가. 작은 모듈 빠르게 작성 가능, 재사용 용이.
프로그램 개발 속도 높임. 모듈은 분리하여 테스트하기도 유용. 디버깅, 테스트 시간 감소
참조 투명성