모나드, 리엑티브 그리고 프로토타입 5

2018. 11. 9. 11:32참고


진행 중인 프로토타입 5에서는 GUI 프로그래밍과 기본 컨텐츠 작업이 한창입니다.


지난주까지 최종 선별하여 현재 7개의 GUI를 확정해서 1차 외형 잡기를 진행하고 있습니다.






그리고 이번 프로젝트부터 Rx 프로그래밍을 도입하기로 하였습니다.


Rx 프로그래밍은 아래 자료를 참고하였습니다.

http://introtorx.com/


그럼 위키피디아 기준 모나드에 대한 용어적 이해를 해봅시다. 

(컴공 용어 해석도 결국 비슷한 소리여서 일반화합니다. various notions of computation 어쩌구 저쩌구)


Monad (philosophy), a term meaning "unit" used by philosophers to signify a variety of entities from a genus to God

Monad (철학) : 철학자가 무리(屬)에서 신까지 다양한 존재를 나타 내기 위해 사용하는 "단위"를 의미하는 용어.


 무리(속)


모나드 용어의 핵심은 다양한 존재를 나타내기 위해 사용하는 "단위"


그리고 앞에서 알려준 링크 자료를 읽다 보면 아나몰피즘, 카타몰피즘;; 등을 언급하면서 변화를 강조하고 모나드로 들어간다는 내용 등이 있습니다.


무언가(1)를 모나드(2)로 변형하고 그 모나드를 사용하여 우리가 원하는 일(3)을 합니다.


이제 기본 개념은 끝났습니다.



실제 Rx 프로그래밍에서 '무언가(1)'를 찾고 그것이 변형된 '모나드(2)'에 해당하는 것을 찾으면 됩니다.


첫 번째 '무언가(1)'는 기존에 우리가 사용했던 상수, 변수, 함수, 배열, 시간!?, IO 등 속해있는 모든 것입니다.

두 번째 '모나드(2)'는 Rx 프로그래밍에서 IObservable<T> 입니다.

세 번째 '일(3)'은 Rx 프로그래밍에서 제공하는 다양한 필터 함수(ex. Where) 등입니다.


합성함수, 역함수 같은 수학적 개념은 아래로.

https://en.wikipedia.org/wiki/Monad_(functional_programming)




Reactive Programming (Rx, Functional Programming)



개념




현실



이러한 제공-구독 관계는 Observer 패턴과 맞아 떨어집니다. 

그래서 Rx 프로그래밍은 Observer 패턴을 응용하여 구현되어 있습니다.


Binding 과정을 통해 데이타를 이해하기 쉽고 자유도 높게 다룰 수 있습니다. (모나드 -> 모나드)

Recursion 이 하나의 데이타를 파고들어가서 원하는 값을 찾는 방향이라면 (breaking it down)

(재귀호출을 통한 search 알고리즘)

Corecursion 은 하나의 값에서 함수를 통해 펼쳐 나가는 방식이라고 할 수 있습니다. (iteratively producing data further)

(Ex) http://introtorx.com/Content/v1.0.10621.0/04_CreatingObservableSequences.html#Corecursion)


Rx Transformation

Anamorphism : T -> IObservable<T>, ex) Subject<T>, Observable.Create, Interval

Bind : IObservable<T1> -> IObservable<T2>, ex) Scan, Select

Catamorphism : IObservable<T> -> T, ex) ToList



개념 끝.