병렬 연산을 사용해 텍스트에서 문자의 빈도를 세어요.
병렬성이란 순차적으로도 할 수 있는 일을 병렬로 처리하는 것을 말해요. 흔한 예시가 바로 문자의 빈도를 세는 거예요. 병렬성을 활용해 여러 텍스트로 이루어진 목록에서 각 문자의 전체 빈도를 계산해요.
이 용어 정리에 따르면, 병렬이고 결정론적인 프로그램을 작성하고 동시성 부분은 (무조건!) Scala가 알아서 처리하도록 맡겨야 해요. 그러지 않으면 온갖 까다로운 동시성 버그 때문에 코드가 금세 지저분해지고 오류가 나기 쉬워져요. 특히 프로그램이 비결정론적이 될 수 있는데, 실제로 이는 디버깅하고 테스트하고 동작을 이해하기가 매우 (사실, 정말 매우) 어렵다는 뜻이에요.
그렇긴 해도 먼저 순차적인 풀이를 작성하고 (테스트 스위트로 검증하는) 것이 좋아요. 그다음에야 코드의 순차적 부분과 병렬 부분을 최대한 분리한 채로 병렬화를 시도해 봐요.
첫 번째 시도로는 Scala의 병렬 컬렉션을 사용할 수 있어요. 이 방법이 거의 너무 단순하다고 느껴질 수도 있어요 (특히 우리 조언을 따라 이미 순차적 풀이를 만들어 두었다면요).
두 번째 시도에서는 scala.concurrent.Future를 사용한 풀이를 해 보는 걸 추천해요.
도움이 필요하면 이 튜토리얼과 그 후속편을 참고해도 좋아요.
다음 사항을 꼭 지켜요.
scala.concurrent.Future는 많은 라이브러리에서 사용되고, Scala로 병렬 및 비동기 프로그래밍을 할 때 전문가가 권하는 방식이에요.
그래서 언어를 익히는 데 꼭 필요하고, Scala 무기고의 일부가 되어야 해요.