지난번에는 함수 하나를 잘 ~ 만드는 법 ( 일급함수 ) 에 대한 내용을 다뤄봤다
이번 주에는 그 잘 ~ 만든 함수를 어떻게 조립할 수 있을지에 대해서 이야기해보려 한다.
책에서는 이를 함수형 도구 체이닝 이라고 부르는데,
여기에는 고차 함수 라는 강력한 무기가 있다.
체이닝 " 고차 함수들로 구성된 함수형 도구들의 연결 방식 "
함수형 도구 체이닝이 무엇일까?
우리는 이미 .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" });
💡 그래서 뭐가 좋은데
✅ 역할이 함수 단위로 분리되면서 다양한 조건이나 행동에 대응이 가능하다.
✅ 개별함수만 테스트가 가능하다
➡ 단순하게 보기 좋은 함수를 떠나 조합 가능한 흐름을 만들 수 있게 해 준다.
💡
고차 함수는 단순한 개발의 기술이 아니다.
복잡한 흐름을 단순하고 조립 가능한 단위로 추상화하는 설계 도구인 것이다.
체이닝은 이러한 고차함수를 조립해
코드가 의미 중심으로 읽히도록 만드는 방법인 것 같다.
개발을 하다 보면 어느 순간,내가 어떤 기술을 당연하게 쓰고 있다는 걸 깨달을 때가 있다.
고차 함수가 내게 그런 존재였다.이번 주는 그 익숙했던 개념의 진짜 가치에 대해서 알게 된 시간이었다.
'FE > book' 카테고리의 다른 글
[함수형코딩]WEEK9 순서가 없을때, 질서를 만드는 방법 (0) | 2025.05.21 |
---|---|
[함수형코딩]WEEK8 타임라인 다이어그램? (0) | 2025.05.14 |
[함수형코딩]WEEK6 일급함수, 너 뭐 돼? (0) | 2025.04.15 |
[함수형코딩]WEEK5 계층형 설계- 추상화의 벽, 작은 인터페이스, 편리한 계층 (0) | 2025.04.08 |
[함수형코딩]WEEK4 계층형 설계- 직접 구현 (0) | 2025.04.03 |