킹의 개발일지

쏙쏙 들어오는 함수형 코딩 29일차 본문

독서/책너두 챌린지

쏙쏙 들어오는 함수형 코딩 29일차

k1ng 2023. 9. 9. 02:31

29일차

<함수형 도구 체이닝 2>

이전 포스팅에 이어 오늘도 함수형 도구 체이닝에 대해 설명한다.

우선 예시를 먼저 보자.

상황을 설명하면, 

가진것전체 고객 배열

필요한것한 번만 구매한 고객들의 이메일 목록

계획: 

  1. 한 번만 구매한 고객을 거른다.
  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)));

 

이렇게 함수형 도구 체인을 최적화 하는것을 스트림 결합이라고 한다. 스트림 결합은 가독성을 해치지 않는 선에서 진행하는 것이 좋아보인다. 한 번의 동작으로 해결하기 위해 콜백 지옥을 그려 둔다면, 다른 사람은 그걸 보고 지옥을 경험 할 것이다.

 

이런 스트림 결합은 개발자의 지식 영역이지 않나 싶다. 어떻게 하면 가독성이 올라갈지, 더 효율적이 될 지 끊임없이 고민해서 최적의 코드를 내놓는것.. 내가 지향하고 꼭 그렇게 성장하고 싶다. 그렇게 되기 위해서는 노력이 필요하겠지? ㅎㅎ 노력하자!