-
Notifications
You must be signed in to change notification settings - Fork 1
1. Kinda의 컨셉
Kinda에 대해 쉽게 이해하기 위해선 저의 개인 블로그를 참고하는 것이 좋습니다.
MVI 패턴에 대한 고찰, 이유와 방법 그리고 한계
Kinda 버전 0.0.1 당시 작성한 글이기 때문에 코드에 약간 차이가 있지만, 개념은 다르지 않습니다.
Kinda에서 사용하는 상태는 불변성을 가지도록 권장합니다. 그 이유는 PureCycle을 보장하기 위해서입니다.
Kinda에서 View를 업데이트하려면 intent(Event)
를 사용하여 이벤트를 발생시켜야 합니다. Kinda는 이벤트에 따라서 다음 상태를 생성하게 되며, 생성된 상태는 화면을 렌더링하기 위해 사용됩니다.
상태는 불변하기 때문에 부수효과없이 우리가 **의도(intent)**한 상태를 얻을 수 있습니다. 결과를 예측할 수 있기 때문에 테스트에도 용이합니다.
// 함수 x()의 인자로 y를 넘기면 항상 결과는 z이다
x(y) == z
// 똑같은 event에 대한 결과는 항상 state이다
intent(event) == state
이것이 제가 PureCycle이라고 부르는 이유입니다. 마치 함수형 프로그래밍의 순수 함수처럼 항상 같은 결과를 반환하기 때문입니다.
하지만 PureCycle
만으로는 소프트웨어를 구성하는 것은 사실상 불가능합니다. 파일 입출력, API 호출, 데이터베이스 등 결과를 보장할 수 없는 환경이 불가피하기 때문입니다. 이 문제를 해결하기 위해 SideEffectCycle가 등장했습니다.
SideEffectCycle은 부수효과를 순수한 관점에서 바라볼 수 있도록 설계되었습니다. intent()
를 사용해 새로운 상태를 생성함과 동시에 부수 효과를 실행(dispatch)합니다. 실행이 끝났다면 결과를 바로 render()
하는 것이 아닌, Event로써 결과를 전달합니다. Event는 PureCycle에 해당하기 때문에 결과를 예측할 수 있습니다.