해당 글의 원문: 김종권의 iOS 앱 개발 알아가기
(따라 작성하면서 공부했습니다... 따라 쓰면서 공부하는 걸 좋아해요 ^,.^)
관찰 가능한 연속성(순차적)형태와 함수 형태의 연산자를 이용해서 비동기&이벤트를 위한 코드로 구성하고 있는 라이브러리 (스케줄러를 통해 parameterized된 실행들을 가능하도록 함)
그동한 사용하던 Cocoa 코드에 결정적이고 비동기적인 방법을 이용하여 이벤트에 반응할 수 있도록 함
ex) 비동기 프로그래밍이 필요한 순간들
(1) 버튼을 눌렀을 때의 반응
(2) TextField에 포커스가 잡힌 경우
(3) 인터넷에서 크기가 큰 이미지 파일을 받는 경우
(4) 디스크에 데이터를 저장하는 경우
(50 오디오를 실행하는 경우
ex) iOS 프로그래밍에서 UIKit을 통해 비동기를 사용했던 순간
(1) NotificationCenter: 백그라운드 진입 후 몇 초 있다가 메시지 알림
(2) The Delegate Pattern: TableView의 didSelectRowAt과 같은 메소드
(3) Closure
var array = [1, 2, 3]
var currentIndex = 0
@IBAction func printNext(_ sender: Any) {
print(arrya[currentIndex])
if currentIndex != array.count -1 {
currentIndex += 1
}
}
(1) 명시적으로 공유된 mutable state를 알기 위함
state: 컴퓨터를 오랫동안 켜 놓으면 꺼질 수 있지만, S/W와 H/W는 처음과 같은 상태 -> state를 바뀌게 한 것은 memory 따라서! 위 예에서 명시적으로 공유된 state는 memory라고 할 수 있음.
(2) Imperative Programming(명시적 코드)의 한계 극복
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupUI()
connectUIControls()
createDataSource()
listenForChanges()
}
위의 코드 같은 경우, 순서를 조금 바꾼다면 전혀 다른 메소드가 될 수 있음 (비동기적인 어려움)
(3) Side Effects를 통해 State 파악
(4) Declarative Code(선언적 코드)
(5) Reactive System
(1) Observables< Data >
(2) Operators
(3) Schedulers
DispatchQueue와 기능 동일

(1) 개념