트랙
/
Scala
Scala
/
연습 문제
/
병렬 문자 빈도
병렬 문자 빈도

병렬 문자 빈도

보통

지침

병렬 연산을 사용해 텍스트에서 문자의 빈도를 세어요.

병렬성이란 순차적으로도 할 수 있는 일을 병렬로 처리하는 것을 말해요. 흔한 예시가 바로 문자의 빈도를 세는 거예요. 병렬성을 활용해 여러 텍스트로 이루어진 목록에서 각 문자의 전체 빈도를 계산해요.

트랙별 안내

이 용어 정리에 따르면, 병렬이고 결정론적인 프로그램을 작성하고 동시성 부분은 (무조건!) Scala가 알아서 처리하도록 맡겨야 해요. 그러지 않으면 온갖 까다로운 동시성 버그 때문에 코드가 금세 지저분해지고 오류가 나기 쉬워져요. 특히 프로그램이 비결정론적이 될 수 있는데, 실제로 이는 디버깅하고 테스트하고 동작을 이해하기가 매우 (사실, 정말 매우) 어렵다는 뜻이에요.

그렇긴 해도 먼저 순차적인 풀이를 작성하고 (테스트 스위트로 검증하는) 것이 좋아요. 그다음에야 코드의 순차적 부분과 병렬 부분을 최대한 분리한 채로 병렬화를 시도해 봐요.

첫 번째 시도로는 Scala의 병렬 컬렉션을 사용할 수 있어요. 이 방법이 거의 너무 단순하다고 느껴질 수도 있어요 (특히 우리 조언을 따라 이미 순차적 풀이를 만들어 두었다면요).

두 번째 시도에서는 scala.concurrent.Future를 사용한 풀이를 해 보는 걸 추천해요. 도움이 필요하면 이 튜토리얼과 그 후속편을 참고해도 좋아요. 다음 사항을 꼭 지켜요.

  • 결과를 기다리는 블로킹 호출이 단 하나만 있고,
  • 그 호출이 프로그램의 맨 끝에 오고,
  • 타임아웃이 설정되어 있도록요.

scala.concurrent.Future는 많은 라이브러리에서 사용되고, Scala로 병렬 및 비동기 프로그래밍을 할 때 전문가가 권하는 방식이에요. 그래서 언어를 익히는 데 꼭 필요하고, Scala 무기고의 일부가 되어야 해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Scala Exercism

병렬 문자 빈도 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Scala 트랙을 연습 문제 95개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

병렬 문자 빈도 깊이 살펴보기!

동시성과 병렬성의 차이를 살펴보고, JavaScript, Go, Elixir, Rust 같은 언어들이 택한 여러 접근법을 함께 봐요.