킹의 개발일지
쏙쏙 들어오는 함수형 코딩 29일차 본문
29일차
<함수형 도구 체이닝 2>
이전 포스팅에 이어 오늘도 함수형 도구 체이닝에 대해 설명한다.
우선 예시를 먼저 보자.
상황을 설명하면,
가진것: 전체 고객 배열
필요한것: 한 번만 구매한 고객들의 이메일 목록
계획:
- 한 번만 구매한 고객을 거른다.
- 고객 목록을 이메일 목록으로 바꾼다.
계획을 보면서 어떤 도구가 필요한지 눈에 보인다면 나이스.. 왠지 필터와 맵을 사용해야 할 것만 같은 느낌이 든다.
자. 코드로 옮겨보자.
var firstTimers = filter(customers, (customer) => customer.purchases.length === 1);
var firstTimerEmails = map(firstTimers, (customer) => customer.email);
여기서 잠깐 왠지 콜백 함수를 함수로 빼면 더 이뻐 보이지 않을까?
function isFirstTimer(customer) {
return customer.purchases.length === 1;
}
function getCustomerEmail(customer) {
return customer.email;
}
자 이렇게 빼낸 함수를 콜백에 넣어주면 가독성이 올라감을 볼 수 있다!
var firstTimers = filter(customers, isFirstTimer);
var firstTimerEmails = map(firstTimers, getCustomerEmail);
그런데 이렇게 콜백 함수를 빼주어도 함수 로직에서 비효율을 보일 수 있다. 아래 예시를 보자.
var name = map(customers, isGoodCustomer);
var nameLenghts = map(names, stringLenght);
위 코드를 보면 왠지 한 단계 map으로 합칠 수 있어 보이지 않는가?
var nameLengths = map(customers, (customer) => stringLength(getFullName(customer)));
이렇게 함수형 도구 체인을 최적화 하는것을 스트림 결합이라고 한다. 스트림 결합은 가독성을 해치지 않는 선에서 진행하는 것이 좋아보인다. 한 번의 동작으로 해결하기 위해 콜백 지옥을 그려 둔다면, 다른 사람은 그걸 보고 지옥을 경험 할 것이다.
이런 스트림 결합은 개발자의 지식 영역이지 않나 싶다. 어떻게 하면 가독성이 올라갈지, 더 효율적이 될 지 끊임없이 고민해서 최적의 코드를 내놓는것.. 내가 지향하고 꼭 그렇게 성장하고 싶다. 그렇게 되기 위해서는 노력이 필요하겠지? ㅎㅎ 노력하자!
'독서 > 책너두 챌린지' 카테고리의 다른 글
| 쏙쏙 들어오는 함수형 코딩 31일차 (0) | 2023.09.13 |
|---|---|
| 쏙쏙 들어오는 함수형 코딩 30일차 (0) | 2023.09.11 |
| 쏙쏙 들어오는 함수형 코딩 28일차 (0) | 2023.09.08 |
| 쏙쏙 들어오는 함수형 코딩 (26 ~ 27일차) (0) | 2023.09.07 |
| 쏙쏙 들어오는 함수형 코딩 (16 ~ 20일차) (2) | 2023.09.07 |