[Learning React] 3장 자바스크립트를 활용한 함수형 프로그래밍

·2022년 10월 11일
0

Learning React

목록 보기
2/5

✏️ 1급 시민?

자바스크립트에서는 함수가 1급 시민이다.
1급 시민이란 정수나 문자열 같은 다른 일반적인 값과 마찬가지로 함수를 취급할 수 있다는 뜻이다.

함수를 변수에 넣을 수 있는 것과 마찬가지로 함수를 객체에 넣을 수도 있고,
함수를 다른 함수에 인자로 넘길 수도 있다.
함수가 함수를 반환할 수도 있다.
함수가 함수를 인자로 받는 경우, 함수가 함수를 반환하는 경우를 고차함수라고 한다.

✏️ 명령형 프로그래밍과 선언적 프로그래밍

📝 명령형 프로그래밍

명령형 프로그램이이란 코드로 원하는 결과를 달성해 나가는 과정에만 관심을 두는 프로그래밍 스타일이다.
명령형 프로그램에서는 코드 안에서 어떤 일이 벌어지는지 코드를 읽는 사람이 더 잘 이해할 수 있게 돕기 위해 주석을 많이 달 필요가 있다.

const string = "Restaurants in Hanalei";
const urlFriendly = "";

for (i=0; i<string.length; i++) {
  if(string[i] === " ") {
    urlFriendly += "-";
  } else {
    urlFriendly += string[i];
  }
}

console.log(urlFriendly); // "Restaurants-in-Hanalei

📝 선언적 프로그래밍

선언적 프로그래밍이란 필요한 것을 달성하는 과정을 하나하나 기술하는 것보다 필요한 것이 어떤 것인지를 기술하는 것에 더 방점을 두고 애플리케이션의 구조를 세워나가는 프로그래밍 스타일이다.
선언적 프로그래밍의 코드 구문은 어떤 일이 발생해야 하는지에 대해 기술하고, 실제로 그 작업을 처리하는 방법은 추상화를 통해 아랫단에 감춰진다.
선언적 프로그래밍은 추론하기 쉬운 애플리케이션을 만들어내며, 애플리케이션에 대한 추론이 쉬우면 그 애플리케이션의 규모를 확장하는 것도 더 쉽다.
리액트는 선언적 프로그래밍이라고 할 수 있다!

const string = "Restaurants in Hanalei";
const urlFriendly = string.replace(/ /g, "-");

console.log(urlFriendly); // "Restaurants-in-Hanalei

✏️ 함수형 프로그래밍 특징

📝 불변성

함수형 프로그래밍에서는 데이터가 변할 수 없다.
원본 데이터 구조를 변경하는 대신 그 데이터 구조의 본사본을 만들되 그 중 일부를 변경한다. 원본 대신 변경한 복사본을 사용해 필요한 작업을 진행한다.
array.push는 불변성 함수가 아니므로 push 대신 array.concat을 사용해야 한다.

📝 순수 함수

순수 함수란 파라미터에 의해서만 반환값이 결정되는 함수를 뜻한다. 최소한 하나 이상의 인수를 받고, 인자가 같으면 항상 같은 값이나 함수를 반환한다.
순수 함수는 부수효과가 없다. 부수효과란 전역 번수를 설정하거나 함수 내부나 애플리케이션에 있는 다른 상태를 변경하는 것을 말한다.
따라서 순수 함수는 함수에 전달되는 인수만 제어하면 되기 때문에 인자에 따른 결과값을 예상할 수 있어 테스트하기 쉽다.

📝 데이터 변환

함수형 프로그래밍은 한 데이터를 다른 데이터로 변환하는 것이 전부다.
데이터 변환을 위해 array.join, array.filter, array.pop, array.slice, array.map, array.reduce, array.reduceRight를 사용할 수 있다.
배열에서 원소를 제거할 경우 array.pop 또는 array.splice 보다는 순수함수는 array.filter를 사용하자!

📝 고차 함수

array.map, array.filter, array.reduce는 모두 다른 함수를 인자로 받으므로 고차 함수이다.

📌 커링? 어떤 연산을 수행할 때 필요한 값 중 일부를 저장하고 나중에 나머지 값을 전달받는 기법

📝 재귀

재귀란 자기 자신을 호출하는 함수를 만드는 기법이다.

📝 합성

함수형 프로그램은 로직을 구체적인 작업을 담당하는 여러 작은 순수함수로 나누기 때문에, 언젠가는 모든 작은 함수를 한데 합칠 필요가 있다.
즉, 함수를 서로 연쇄적으로 또는 병렬로 호출하거나 여러 작은 함수를 조합해서 더 큰 함수로 만드는 과정을 반복해서 전체 애플리케이션을 구축해야 한다.

그 중 함수를 연쇄적으로 호출하는 것을 체이닝이라고 한다.

합성 메서드에는 replace, both, compose가 있다.

profile
개발을 개발새발 열심히➰🐶

0개의 댓글