여러 인자를 받는 함수를 인자 하나씩 받는 함수들의 연쇄로 변환하는 기법입니다. 예를 들어 add(a, b)를 add(a)(b) 형태로 바꾸면, add(1)처럼 인자 일부만 적용한 함수를 미리 만들어 재사용할 수 있습니다. 함수 조합과 부분 적용을 쉽게 만들어 줍니다.
FP와 OOP는 함께 쓸 수 없나요?
함께 쓸 수 있습니다. 객체로 domain을 모델링하면서도 내부 로직은 순수 함수와 불변 데이터 중심으로 작성할 수 있습니다.
React가 함수형 패러다임을 따르는 이유는?
컴포넌트를 순수 함수처럼 다루면 같은 props에 같은 UI를 보장할 수 있습니다. 그래서 렌더링 결과를 예측하기 쉽고, 테스트와 최적화(메모이제이션, 렌더 스킵)도 단순해집니다. side effect는 useEffect로 격리해 순수한 렌더링 로직과 분리합니다.
side effect는 어떻게 관리하나요?
side effect를 완전히 제거할 수는 없기 때문에 격리하는 전략을 씁니다. 네트워크 요청, 타이머, 로그 출력처럼 외부와 상호작용하는 코드를 함수형 로직과 분리하고 경계를 명확히 합니다. React에서는 useEffect, Redux에서는 middleware처럼 effect 전용 레이어를 두는 것이 대표적인 방식입니다.
부가 설명
프로그램이 커질수록 상태가 언제, 어디서 바뀌었는지 추적하기 어려워집니다. 같은 함수처럼 보여도 내부에서 전역 상태를 바꾸거나 외부 값에 의존하면 실행 순서에 따라 결과가 달라질 수 있습니다.
함수형 프로그래밍은 이런 문제를 줄이기 위해 계산을 함수의 입력과 출력 관계로 다룹니다. 같은 입력에는 같은 출력을 내고, 기존 값을 직접 바꾸기보다 새로운 값을 만들어 반환하는 식입니다. 그래서 코드의 일부를 따로 떼어 테스트하거나, 여러 변환 단계를 조합하기 쉽습니다.
JavaScript에서도 map, filter, reduce 같은 고차 함수를 통해 함수형 스타일을 자주 사용합니다. 배열을 직접 변경하면서 반복문 안에서 상태를 누적하기보다, 데이터를 어떤 규칙으로 변환하고 걸러내고 합칠지 표현하는 방식입니다.
한 줄 정리
함수형 프로그래밍은 순수 함수, 불변성, 함수 조합을 중심으로 프로그램을 구성하는 패러다임입니다.