함수형 반응형 프로그래밍으로 행맨 게임의 로직을 구현해요.
행맨은 간단한 단어 추측 게임이에요.
함수형 반응형 프로그래밍은 상호작용하는 프로그램을 작성하는 방법이에요. 이 방식은 평소의 관점과는 달라요. "버튼을 누르면 카운터를 증가시킨다"라고 쓰는 대신, "카운터의 값은 버튼을 누른 횟수의 합이다"라고 작성해요.
함수형 반응형 프로그래밍으로 행맨의 기본 로직을 구현해요. 이를 위해서는 FRP 라이브러리를 설치해야 하는데, 설치 방법은 이 연습 문제의 언어/트랙별 파일에 설명되어 있어요.
함수형 프로그래밍의 큰 특징 중 하나는 부수 효과가 없는 함수를 만드는 거예요. 함수가 어떤 숨은 객체를 바꿔 놓았는지 걱정할 필요가 없다는 뜻이죠.
리액티브 프로그래밍에서는 컴포넌트가 스스로 작업을 찾아 나서는 대신, 작업이 컴포넌트 쪽으로 밀려 들어와요. 콜백과 비슷하지만 훨씬 높은 수준에서, 더 강력한 추상화를 가지고 동작하죠. 리액티브 프로그래밍은 함수형 프로그래밍과 함께 쓰이는 경우가 아주 많아요.
이 연습 문제에서는 Java API로 리액티브 프로그래밍을 할 수 있는 잘 알려진 라이브러리인 RxJava를 사용해요.
이 연습 문제에서 흉내 내는 상황은 두 가지 입력을 받는 애플리케이션이에요.
이 두 입력은 Observables, 그러니까 io.reactivex.Observable 클래스를 사용해서 구현돼요.
기본적으로 Observable을 구독하면 어딘가에서 만들어지는 값에 "반응"할 수 있어요. 예를 들어 게임 엔진은 새 게임이 시작된 것을 감지하면 새 단어를 밀어 넣고, 키보드 이벤트는 글자 입력을 만들어 내죠.
그런데 많은 리액티브 프레임워크는 강력한 추상화를 제공해요. 받은 입력을 바꿀 수 있게 해 주는 map이나, 하나 이상의 Observable을 합쳐 주는 combine처럼요.
Output 클래스는 이 연습 문제에서 처리한 결과로 기대되는 값이에요. 덕분에 front-end는 어떤 형태의 저장소도 필요로 하지 않고 게임의 전체 상태를 표시할 수 있죠. 따라서 front-end도 함수형이 돼요.
이 연습 문제에서는 두 입력을 모두 사용해서 이 결과를 Observable 형태로 만들어 내는 방법을 찾아야 해요.
Exercism에 가입하고 Java 트랙을 개념 26개연습 문제 158개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.