본문 바로가기
카테고리 없음

[함수형 프로그래밍] 함수형 프로그래밍

by hbIncoding 2024. 7. 24.

1. 프로그래밍 패러다임의 하나로, 함수의 사용과 함수 호출을 중심으로 프로그램을 구성하는 방식입니다. 이 접근법은 순수 함수(pure functions), 고차 함수(higher-order functions), 불변성(immutability), 함수 합성(function composition) 등을 중요시합니다.

  • 순수 함수
    • 같은 입력값에 대해 항상 같은 출력값을 반환하는 함수
    • 함수 실행 중에 외부 상태를 변경하지 않으며, 함수의 실행이 외부 상태에 영향을 받지 않음.
// 순수 함수 예제
function add(a, b) {
  return a + b;
}
  • 고차 함수 (Higher-Order Functions)
    • 함수를 인자로 받거나, 함수를 반환하는 함수
// 고차 함수 예제
function applyOperation(a, b, operation) {
  return operation(a, b);
}

const result = applyOperation(2, 3, add); // 5
  • 불변성 (Immutability)
    • 데이터의 상태를 변경하지 않으며, 변경이 필요할 경우 새로운 데이터를 생성.
    • 원본 데이터를 변경하지 않고, 복사본을 만들어서 사용.
// 불변성 예제
const numbers = [1, 2, 3, 4];
const newNumbers = [...numbers, 5]; // [1, 2, 3, 4, 5]
  • 함수 합성 (Function Composition)
    • 여러 함수를 조합하여 새로운 함수를 만드는 것.
    • 작은 함수들을 결합하여 복잡한 연산을 수행하는 함수로 만듦.
// 함수 합성 예제
const compose = (f, g) => x => f(g(x));

const addOne = x => x + 1;
const double = x => x * 2;

const addOneThenDouble = compose(double, addOne);

console.log(addOneThenDouble(2)); // 6

2. 함수형 프로그래밍의 장점

  • 예측 가능성: 순수 함수는 같은 입력에 대해 항상 같은 출력을 반환하므로, 프로그램의 동작을 예측하기 쉬움.
  • 테스트 용이성: 순수 함수는 외부 상태에 의존하지 않으므로 테스트가 용이함.
  • 병렬 처리 용이성: 불변 데이터를 사용하기 때문에 병렬 처리가 쉬워짐.
  • 코드의 가독성 및 유지보수성 향상: 함수형 프로그래밍은 선언적(declarative) 스타일을 채택하므로 코드가 간결하고 이해하기 쉬움.