함수형 프로그래밍(FP: Functional Programming)
순수 함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용을 피하는 기본 원칙에 따라 소프트웨어를 구성하는 프로그래밍 패러다임
1급 객체(First object , Firest class citizen)
- 변수나 데이터 구조안에 넣을 수 있다
- 파라미터로 전달할 수 있다.
- 동적으로 프로퍼티 할당이 가능
- 리턴값으로 사용할 수 있다
함수형 프로그래밍 조건
일반적으로 함수형 프로그래밍에서는 다음 세가지 조건을 만족시켜야 합니다
1) 순수 함수 (pure function)
같은 입력에 대해 항상 같은 출력을 반환하는 함수이다
- 동일한 입력에 대해 항상 같은 값을 반환
- 부작용이 없는 결과를 생성 -> 함수에서 인자를 변경하거나 프로그램의 상태를 변경 x
2) 고차 함수 (High Order Function)
1급 함수의 서브셋으로 다음 조건을 만족하는 함수
- 함수의 인자로 함수를 전달할 수 있다
- 함수의 리턴값으로 함수를 사용할 수 있다
3) 익명 함수 (Anonymous function)
이름이 없는 함수를 말하며 람다식으로 표현되는 함수 구현을 말한다
람다(Lamda)
기본적으로 함수의 구조로 되어 있으며 자바에서는 ->
와 같이 화살표 형태의 기호를 이용해 매개변수를 함수 바디로 전달하는 형태를 취한다

장점
- 효율적인 람다 함수의 사용을 통해 불필요한 루프문의 삭제가 가능하며 , 함수의 재활용 용이
- 필요한 정보만을 사용하는 방식을 통한 성능 향상
- 일반적으로 다중 cpu를 활용하는 형태로 구현되어 병렬처리에 유리
단점
- 이론상 단순하게 모든 원소를 전부 순회하는 경우 람다식이 조금 느릴 수 있음
- 디버깅시 함수 콜스택 추적이 다소 어려움
- 지나치게 남발하면 코드가 이해하기 어려워짐
