Programing/javascript

자바스크립트 실무 유틸 함수 시리즈 10 - 함수형 프로그래밍(FP) 스타일

Dongkkase 2025. 4. 29. 19:53
반응형

이번 10편에서는 자바스크립트에서 함수형 프로그래밍(FP) 스타일로 활용할 수 있는 유틸 함수들을 정리합니다. 불변성(immutability), 고계함수(higher-order functions), 순수함수(pure functions) 같은 개념을 실무에 쉽게 적용할 수 있는 함수들입니다.


✅ 1. compose (함수 합성)

📌 여러 함수를 오른쪽에서 왼쪽으로 결합

function compose(...fns) {
  return (arg) => fns.reduceRight((acc, fn) => fn(acc), arg);
}

📌 활용 예시

  • 데이터 변환 파이프라인 구성
  • 복잡한 변환 과정을 단계별로 처리

✅ 2. pipe (함수 파이프라인)

📌 여러 함수를 왼쪽에서 오른쪽으로 결합

function pipe(...fns) {
  return (arg) => fns.reduce((acc, fn) => fn(acc), arg);
}

📌 활용 예시

  • 읽기 좋은 데이터 변환 흐름 만들기
  • 가독성 높은 로직 작성

✅ 3. curry (커링)

📌 여러 인자를 하나씩 받는 함수로 변환

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    } else {
      return (...nextArgs) => curried(...args, ...nextArgs);
    }
  };
}

📌 활용 예시

  • 재사용 가능한 함수 생성
  • 설정 값 부분 적용(partial application)

✅ 4. once (한 번만 실행되는 함수)

📌 단 한 번만 실행하고 이후 호출은 무시

function once(fn) {
  let called = false;
  let result;
  return function (...args) {
    if (!called) {
      called = true;
      result = fn.apply(this, args);
    }
    return result;
  };
}

📌 활용 예시

  • 초기화 작업 한 번만 실행
  • API 요청 중복 방지

✅ 5. memoize (메모이제이션)

📌 계산 결과를 캐싱하여 성능 최적화

function memoize(fn) {
  const cache = new Map();
  return function (...args) {
    const key = JSON.stringify(args);
    if (cache.has(key)) {
      return cache.get(key);
    }
    const result = fn(...args);
    cache.set(key, result);
    return result;
  };
}

📌 활용 예시

  • 무거운 계산 함수 최적화
  • 검색어 자동완성 성능 향상

✅ 결론

함수형 프로그래밍 스타일은 복잡한 로직을 단순하고 명확하게 만들 수 있습니다. 이번 시리즈에서 다룬 유틸 함수들을 활용하면 유지보수성이 높고 오류가 적은 코드를 작성할 수 있습니다.

반응형