FE/book

[함수형코딩]WEEK7 함수형 도구 체이닝과 고차함수

<ziny/> 2025. 5. 7. 17:40
728x90

 

지난번에는 함수 하나를 잘 ~ 만드는 법 ( 일급함수 ) 에 대한 내용을 다뤄봤다

이번 주에는 그 잘 ~ 만든 함수를 어떻게 조립할 수 있을지에 대해서 이야기해보려 한다. 

 

책에서는 이를 함수형 도구 체이닝 이라고 부르는데,

여기에는 고차 함수 라는 강력한 무기가 있다.

체이닝 " 고차 함수들로 구성된 함수형 도구들의 연결 방식 "

 

 

함수형 도구 체이닝이 무엇일까?

우리는 이미 .filter(), .map(), .reduce() 같은 체이닝을 매일 사용한다

위 같은 함수들을 줄줄이 연결해 데이터 흐름을 구성하는 방식을 함수형 도구 체이닝 이라고 한다. 

 

📌 예시

const emails = users
  .filter(u => u.active)
  .map(u => u.email)
  .join(', ');

 

🔷 이런 코드는 for 반복문 보다 명확하다. why?

 

왜냐면 어떻게 처리할지 가 아니라 무엇을 하고싶은지를 나타내고 있기 때문이다.

 

- active한 사용자만 남기고

- email만 뽑아서

- 쉼표로 이어주기

 

이것이 바로 체이닝의 힘이다 

 

🔧 이게 다 고차함수 덕분?

체이닝 자체를 보면 단순히 문법이 아니다!

그저 고차 함수로 만든 추상화의 결과일 뿐이다. 

 

📌 예시

const pipe = (...fns) => (x) => fns.reduce((acc,fn) => fn(acc) ,x);

 

- ...fns는 연속적으로 실행할 함수들의 배열

- x는 초기값

- reduce는 그 함수를 순차적으로 적용

 

이걸 써서 흐름을 다시 짜면

const process = pipe(
	x => x + 1,
    x => x * 2,
    x => `${x}원`
);

console.log(process(3)); // 8원

 

즉 함수를 인자로 받고 새로운 함수를 리턴하는 방식인 것이다.

 

💡 그런데 그게 실무에서 왜 중요할까?

1️⃣ 각 함수는 작고, 명확한 역할을 수행한다.

2️⃣ 작은 함수를 다시 조합해서 새로운 흐름을 만들 수 있다. 

3️⃣ 같은 흐름을 다양한 데이터에 적용 가능하다. 

4️⃣ 상단에서 하단으로 자연스럽게 읽히는 구조가 된다. 


🧩  콜백도 추상화가 필요해

실제 작업을 하다 보면

조건이나, 상태, 비동기 같은 요소에 의해 콜백 형태의 코드를 짜게 된다.

콜백이 많아지면

조건의 분기, 실행 조건이 붙으면서 읽기 어려운 코드가 되어버린다. 

 

📌 예시

if(user.role === 'admin'){
	if(user.isActive){
    	console.log('관리자 활성 사용자');
    }
}

 

 

책에서는 읽기 어려운 콜백을

추상화하는 작업이 중요하다고 말하고 있는데

 

📌 예시

function when(predicateFn, actionFn) {
  return (value) => {
    if (predicateFn(value)) {
      actionFn(value);
    }
  };
}

const logIfAdmin = when(
  u => u.role === "admin",
  u => console.log(`관리자: ${u.name}`)
);

logIfAdmin({ name: "철수", role: "admin" });

 

💡 그래서 뭐가 좋은데

역할이 함수 단위로 분리되면서 다양한 조건이나 행동에 대응이 가능하다.

 개별함수만 테스트가 가능하다

 

➡ 단순하게 보기 좋은 함수를 떠나 조합 가능한 흐름을 만들 수 있게 해 준다.


💡

고차 함수는 단순한 개발의 기술이 아니다. 

복잡한 흐름을 단순하고 조립 가능한 단위로 추상화하는 설계 도구인 것이다. 

체이닝은 이러한 고차함수를 조립해

코드가 의미 중심으로 읽히도록 만드는 방법인 것 같다.

 

개발을 하다 보면 어느 순간,내가 어떤 기술을 당연하게 쓰고 있다는 걸 깨달을 때가 있다.
고차 함수가 내게 그런 존재였다.이번 주는 그 익숙했던 개념의 진짜 가치에 대해서 알게 된 시간이었다.

 

728x90