프로그래밍 패러다임
부수 효과
외부 상태를 변경하거나 함수로 들어온 인자 상태를 변경하는 것
output
이 나오면 input
만 점검하면 된다는 장점일급 객체
클래스(객체)
가 일급 객체, 함수형 프로그래밍에서는 함수 자체
가 일급 객체!Lexical environment
)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수function outerFn() {
let x = 10;
return function innerFn(y) { // 클로저
return x = x + y;
}
}
let a = outerFn(); // 외부함수 호출은 한번만. 이제 a 변수는 innerFn 함수를 참조
a(5); // 15
a(5); // 20
a(5); // 25
Boolean
, Number
, String
, null
, undefined
, Symbol
과 같은 타입은 불변성을 유지!immer
라이브러리 사용function add(int a, int b) {
return a + b
}
function mult(int a, int b) {
return a * b;
}
const x = add(2, mult(3, 4));
function add(int a, int b) {
const result = a + b;
console.log(result);
return result;
}
const result = add(3, 4);
filter
, map
, reduce
const hello = (word) => (name) => {
console.log(`${word}, ${name}`);
};
hello("hi")("jhj");
Procedure
(루틴, 서브루틴, 메소드, 함수)를 이용해 작성하는 프로그래밍 스타일객체지향(명령형)
어떻게
할 것인지 설명 (상태 변화를 통해 원하는 값을 얻음! → 부수효과 존재)함수형(선언형)
무엇을
할 것인지 설명let numbers = [1, 2, 3];
function multiply(numbers, multiplier) {
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbes[i] * multiplier;
}
}
// 어떻게
function multiply(number, multiplier) {
return number.map((num) => num * multiplier);
}
// 무엇을
참고자료
https://jongminfire.dev/함수형-프로그래밍이란
https://hanamon.kr/javascript-클로저/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures