함수형 프로그래밍(FP)

katanazero·2021년 8월 2일
0

etc

목록 보기
7/12

함수형 프로그래밍(Functional Programming)

  • 함수형 프로그래밍이란, 프로그래밍의 여러가지 패러다임중 하나(OOP 같은거처럼)
  • 함수의 조합으로 작업을 수행하며, 중요한것은 이 작업이 이루어지는 동안 작업에 필요한 데이터와 상태는 변하지 않음

순수함수(pure function) : 외부에 아무런 영향을 미치지 않는 함수를 순수함수라고 이야기한다.
순수 함수가 강력한 이유 중 하나는 테스트 및 디버그가 훨씬 더 쉽기 때문이다. 순수 함수는 특정 입력 값이 주어지면 동일한 출력을 반환해야 하므로 이 함수를 매우 쉽게 테스트할 수 있다.

고차함수(high-order function) : 함수를 또 하나의 값으로 간주하여 함수의 인자 혹은 반환값으로 사용을 하는데 이를 고차함수라고 한다.
JS 에서 map(), reduce(), filter() 등이 고차함수다.

함수형과 반대되는 명령형 프로그래밍(Imperative Programming)

  • C언어 등의 구현했던 방식이 대부분 명령형 프로그래밍 방식이다.
  • 명령형 프로그래밍은 수행할 작업을 순서대로 기술하는 방식이다.
  • 함수형 프로그래밍에서의 함수는 순수함수(pure function)를 의미하지만, 명령형에서는 특정한 종류와 명령이 기술되어 있는 함수 = 프로시저를 의미한다.

    서적들을 잘 살펴보면, 함수란 특정 기능을 수행하는 코드 집합 or 특정 기능을 작은 프로그램 단위 라고 소개를 하는데 이는 명령형 프로그래밍에서 이야기하는 함수의 개념이다.

JS 에서 함수형 프로그래밍이 가능

  • 1급 객체로서의 함수
  • 클로저
// 합을 구하는 코드

function sum(x, y) {
  	const result = x + y;
  	return result;
}

sum(1,2);

위 코드는 명령형 프로그래밍으로 작성한거다. 이를 함수형으로 바꾸면?

const sum = x => {
	return y => x + y;
}

sum(1)(2); 

// or
// const sumReadyY = sum(1);
// sumReadyY(2);

커링을 활용해보았다. sum(1) 을 실행하면, 익명 화살표 함수를 반환한다.(이때 클로저로 인해 x 값을 기억하고 있다) 이때 더할 숫자를 하나 더 넘겨서 결과를 얻는다. => 3

초기에 셋팅한 x 인자는 외부에서 접근이 불가능하다. -> x 값을 클로저를 사용하여 영향을 받지 않는다.


// 명령형
const numbers = [1, 2, 3, 4, 5];
let resultSum = 0;
for(let num of numbers) {
	resultSum += num;
}

// 선언형(함수형 프로그래밍)
// reduce() 가 인자로 들어온 sum() 의 로직 수행
const numbers = [1, 2, 3, 4, 5];
const sum = (x, y) => x + y;
const sumNumbers = numbers.reduce(sum, 0);
console.log(sumNumbers); // 15


// 아래와 같은 경우는 순수함수가 아님
let c = 10;
function add(a, b) {
  return a + b + c;
}
console.log(add(10, 2)); // 22
c = 20; // 값 변경
console.log(add(10, 2)); // 32
profile
developer life started : 2016.06.07 ~ 흔한 Front-end 개발자

0개의 댓글