함수형 프로그래밍

종종2·2023년 8월 16일
0

함수형 프로그래밍이란?

함수형 프로그래밍은 선언형 프로그래밍의 일종으로 선언형 프로그래밍이란 어떻게 할건지를 나타내기보다는 무엇을 할 건지 설명하는 방식을 말한다.

  • 함수형 프로그래밍 : 순수 함수를 조합하고 블록처럼 쌓아 로직을 구현하고, 고차함수를 통해 재사용성을 높인 프로그래밍
    • 순수 함수 : 출력이 입력에만 의존하는 함수
      const pureFunction = (a,b) => a+b;
    • 고차함수 : 함수가 함수를 매개변수로 받아 로직을 생성하는 함수(함수를 매개변수 즉, 값으로 사용할 수 있는 것은 자바스크립트에서의 함수가 일급객체이기 때문이다. 아래 참조)

자바스크립트 함수는 일급객체이다.

일급객체의 특징으로는 아래로 특정지을 수 있다.

  • 변수에 할당할 수 있다.
  • 값으로 다를 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.
	const a = 10;
	const add10 = a => a+10;
	const r = add10(a);

클로저

“A closure is the combination of a function and the lexical environment within which that function was declared.”
클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.
[출처] MDN

스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑(lexical scoping)이라 한다.


	const addClosure = a =>b =>a+b; //함수를 리턴하는 함수

	const innerF = addClosure(5);
	console.log(innerF(3)) // 8

위의 예제에서 함수를 리턴하는 함수라고 할 수 있다. 이 때, b => a+b라는 함수를 리턴하게 되고, a라는 매개변수를 반영하는 함수이다.

순서(콜스택 관점)
1.addClouser함수를 실행 -> b=>a+b 함수를 반환하고 (innerF에 할당)종료.
2.innerF 함수 실행 (내부함수 실행)

이 순서를 파악하면, 이미 addClosure함수를 종료 했는데? innerF 함수 즉, b=> a+b 를 실행하는 함수에서 a의 값을 기억하는 것처럼 보인다. 즉, 외부함수 밖에서 내부함수가 호출되더라도 외부함수의 지역변수에 접근할 수 있는 함수를 클로저라고 부른다.

  • 클로저는 자신이 선언됐을 때의 렉시컬환경을 기억하며, 자신이 선언됐을 때의 환경 밖에서 호출되어도 선언된 환경에 접근할 수 있는 함수를 말한다.

참조

profile
나 이현종

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

많은 도움이 되었습니다, 감사합니다.

답글 달기