송치원 (곰튀김)
iamchiwon.github.io
Functional Reactive
Programming Paradigm
Immutable
Side Effect
Pure Function
Composition
Iterator
Generator
Function
Reduce
Map
Consumer
First-Class Citizen
High-Order Function
Imperative Programming
Declarative Programming
Reactive
RxSwift
Stream
Asynchronous
Terms
Functional Programming
Event Stream
Data Stream
Filter
Functional
Reactive
Programming
Paradigm
Contents
Functional
Reactive
Programming
Paradigm
Contents
Programming
Program
input output
Paradigm
https://ko.wikipedia.org/wiki/패러다임
Paradigm
Low memory
Optimized
Medium Memory High memory
Concurrency
Performance / Responsibility
Data : Program = 1:1
Reusable
Abstract Data
Low Memory Mass Production Concurrency
Functional
Data
Program Program Program Program
Functional
Data
Program Program Program Program
Immutable
Functional
Side-Effect
Pure function
Functional
❶
❸
❷
Functional
❶
❸
❷
Composition
Generator
Function
Consumer
Functional
First Class CitizenHigh-Order function
Functional
OOP 김밥만들기
Functional
FP 김밥만들기
Functional
Imperative programming
명령형 프로그래밍
Declarative programming
선언형 프로그래밍
commands
functions
Functional
•데이터는 immutable 하게 취급하자
•데이터 변경이 필요할 때는 새로 만들자
•Side-Effect 을 없애기 위해서 Pure Function 을 사용하자
•Function 들의 Composition과 High-Order Function

으로 프로그램을 만들자
•Data가 아닌 Process에 집중해서 프로그램을 만들자
Functional
ISSUE
Expensive job
Async job
Wait
?
Callback
Delegate
Reactive
https://en.wikipedia.org/wiki/Reactive_programming
In computing, reactive programming is an asynchronous
programming paradigm concerned with data streams
and the propagation of change.
Reactive
Reactive Libraries
Reactive Extension
Java, JS, .NET, Scala, Swift, Python,
…
http://reactivex.io/
ReactiveCocoa Objective-C https://github.com/ReactiveCocoa/ReactiveCocoa
ReactiveSwift Swift https://github.com/ReactiveCocoa/ReactiveSwift
Sodium Java, JS, Swift, Kotlin, C, Rust https://github.com/SodiumFRP
ReactFX Java https://github.com/TomasMikula/ReactFX
Reactive-Banana Haskell http://wiki.haskell.org/Reactive-banana
Bacon.JS JS https://baconjs.github.io/
Kefir.JS JS https://rpominov.github.io/kefir/
Flapjax JS http://www.flapjax-lang.org/
Reactive
Generator
Consumer
map
Filter
Reduce
Stream
Observable
Subscriber
Operator
Reactive
getText
Subscribe
Text
1
2
3
url
Reactive
Reactive
Reactive
pod ‘RxSwift’
import RxSwift
Reactive
Reactive pod ‘RxSwift’
import RxSwift
Reactive pod ‘RxCocoa’
import RxCocoa
Reactive
•Async 한 처리를 Functional 하게 처리하자
•리턴값은 Stream인 Observable을 반환하자
•Stream 에 흐르는 Data/Event 를 Operator 로 처리하자
•Stream과 Stream을 연결하자
•Data가 아닌 Process에 집중해서 프로그램을 만들자
Functional
Side-Effect 가 없도록 프로그래밍 하는 패러다임
Reactive
Async 한 작업을 Functional 하게 처리하는 아이디어
RxSwift
Reactive 아이디어를 구현한 Swift 라이브러리
Summary

20171104 FRP 패러다임