• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

group_by, count_by함수가 좋은건지 잘 모르겠습니다.

20.12.01 23:39 작성 조회수 136

0

안녕하세요? 좋은강의를 무료로 공개해 주셔서 감사한 마음으로 잘 듣고있습니다!

공부하다 map, filter, reduce에 비해 group_by, count_by함수는 좋다는 느낌이 들지 않아서 답답함을 해소할 수 있을까 싶어 질문 드립니다.

제가 그냥 생각해 봤을때는 group_by를 통해 멋지게 그룹핑을 했다면 그 결과를 reduce와 같은 함수를 이용해서 집계를 하는게 좋다고 생각을합니다. 예를들어서 다음과 같이 동작했으면 좋겠습니다.

_go(

  [{a:1, b:1}, {a:2, b:2}, {a:3, b:1}, {a:4, b:3}],

  list => _group_by(list, obj=>obj.b),

  grouped => _group_reduce(grouped, (a_sum, obj)=>a_sum+obj.a, 0),

  console.log,

)

// 결과

{

  '1': 4, 

  '2': 2,

  '3': 4,

}

이런 저의 바람과는 달리 카운팅 이라는 단순한 동작을 위해서도 새롭게 'count_by함수를 만들어 낸다'는점이 앞에서 배운 '함수형'이라는 느낌이 나지 않는거 같습니다.

이렇게 된다면 위의 예제와 같이 group_by된 결과에서 a의 값을뽑아 모두 더하는 작업을 하려면 '_group_by_add_a'와 같은 함수를 만들어야 하고, 또 다른 작업을 하려면 또 새롭게 무언가를 만들어내야 할 거 같습니다.

그리고 map, filter, reduce등은 array like를 만들어 내고 이 결과는 go를통해 계속하여 연결해 쓸 수 있는 느낌이었지만, group_by, count_by는 객체를 리턴해 버려서 더이상의 진행은 없는 느낌이 듭니다. (물론 Object.values후 flat 하면 다시 Array가 되긴 합니다만, 이렇게 해버리면 에초에 그룹으로 묶은 의미가 사라지는게 아닐까 합니다.)

위와같이 그룹에 대해서 또 다시 연산하는 무언가를 나중에 배우는 건가요? 아니면 함수형은 마지막을 만들어둔 집계함수로 마무리하는게 끝인 건가요? 그리고 return이 객체인 경우 그 이후 진행을 어떻게 하는게 좋은지도 궁금합니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요. :)

함수를 매번 만드실 필요는 없습니다. 

강의에서 count_by 와 group_by를 만든건 reduce를 통해 이런 로직들을 구현하는 것이 편리하다라는걸 보여드리기 위해서이지 필요할때마다 함수를 만들어서 써야한다라는 이야기를 드린건 아닙니다. 

reduce는 보통 프로그램의 결과입니다. 물론 그 이후에도 연산을 하려면 말씀하신대로 entires나 values를 이용하면 됩니다. 

좋은 하루 되세요. :)