핵심 개념 요약:
순수 함수(Pure Function)
→ 입력이 같으면 항상 결과가 같고, 외부 상태를 변경하지 않는 함수
불변성(Immutable Data)
→ 데이터를 수정하지 않고, 복사본을 만들어 변경
고차 함수(Higher-Order Function)
→ 함수를 인자로 받거나, 함수를 리턴하는 함수
선언형 프로그래밍
→ “무엇을 할 것인가”에 집중 (반대로 명령형은 “어떻게 할 것인가”에 집중)
/////////////// 함수형 ///////////////
const numbers = [1, 2, 3, 4, 5];
// map: 각 요소에 2배 하기
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
// filter: 짝수만 남기기
const evens = numbers.filter(n => n % 2 === 0);
console.log(evens); // [2, 4]
// reduce: 합계 구하기
const sum = numbers.reduce((acc, n) => acc + n, 0);
console.log(sum); // 15
/////////////// 명령형 ///////////////
const numbers = [1, 2, 3, 4, 5];
// 1. map: 각 요소에 2배 하기
const doubled = [];
for (let i = 0; i < numbers.length; i++) {
doubled.push(numbers[i] * 2);
}
console.log(doubled); // [2, 4, 6, 8, 10]
// 2. filter: 짝수만 남기기
const evens = [];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
evens.push(numbers[i]);
}
}
console.log(evens); // [2, 4]
// 3. reduce: 합계 구하기
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
console.log(sum); // 15
명령형 프로그래밍: 레시피처럼 직접 물을 끓이고 → 면을 넣고 → 10분 삶고 를 하나하나 지시
함수형 프로그래밍: 라면을 만든다는 의미 중심으로 기술