λͺ λ Ήν νλ‘κ·Έλλ°((Imperative programming)
- 무μ(What)μ ν κ²μΈμ§ λνλ΄κΈ°λ³΄λ€ μ΄λ»κ²(How) ν 건μ§λ₯Ό μ€λͺ νλ λ°©μ
- μ μ°¨μ§ν₯ νλ‘κ·Έλλ°: μνλμ΄μΌ ν μμ°¨μ μΈ μ²λ¦¬ κ³Όμ μ ν¬ν¨νλ λ°©μ (C, C++)
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°: κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈμμ©μ νν (C++, Java, C#)
μ μΈν νλ‘κ·Έλλ°(declarative programming)
- μ΄λ»κ² ν 건μ§(How)λ₯Ό λνλ΄κΈ°λ³΄λ€ 무μ(What)μ ν 건μ§λ₯Ό μ€λͺ νλ λ°©μ
- ν¨μν νλ‘κ·Έλλ°: μμ ν¨μλ₯Ό μ‘°ν©νκ³ μννΈμ¨μ΄λ₯Ό λ§λλ λ°©μ (ν΄λ‘μ , νμ€μΌ, 리μ€ν)
ν¨μν νλ‘κ·Έλλ°
- ν¨μ(function)λ₯Ό μ΄μ©ν΄μ μ¬μ΄λ μ΄ννΈ μλλ‘ μ μΈν νλ‘κ·Έλλ°μ μ΄μ©νλ κ²
- νλ‘κ·Έλ¨μ΄ μνμ λ³ν μμ΄ λ°μ΄ν° μ²λ¦¬λ₯Ό μνμ ν¨μ κ³μ°μΌλ‘ μ·¨κΈ
- μμνκ² ν¨μμ μ λ¬λ μΈμκ°λ§ κ²°κ³Όμ μν₯μ μ£Όλ―λ‘ μνκ°μ κ°μ§ μκ³ μμνκ² ν¨μλ‘λ§ λμ
- μ΄λ€ μν©μμ νλ‘κ·Έλ¨μ μ€ννλλΌλ μΌμ νκ² κ°μ κ²°κ³Ό κ° λμΆ κ°λ₯
- ν¨μ νΈμΆμ΄ κ°κ° μνΈ κ°μμμ΄ λ°°νμ μΌλ‘ μ€νλλ―λ‘ λ³λ ¬μ²λ¦¬ν λ μ¬μ΄λ μ΄ννΈκ° κ±°μ μλ€
- νμν λ§νΌ ν¨μλ₯Ό λλμ΄ μ²λ¦¬ν μ μλλ‘ μ€μΌμΌμ ν μ μκΈ°λλ¬Έμ λκ·λͺ¨ λ³λ ¬μ²λ¦¬μ κ°μ μ΄ μλ€
- ν¨μν νλ‘κ·Έλλ° μ₯μ
- μ¬λ¬κ°μ§ μ°μ°μ²λ¦¬ μμ μ΄ λμμ μΌμ΄λλ νλ‘κ·Έλ¨μ λ§λ€κΈ° μ½λ€
- λ©ν° μ½μ΄ νΉμ μ¬λ¬ κ° μ°μ° νλ‘μΈμλ₯Ό μ¬μ©νλ μμ€ν μμ ν¨μ¨μ μΈ νλ‘κ·Έλ¨μ λ§λ€κΈ° μ½λ€
- μνλ³νμ λ°λ₯Έ λΆμμ©μμ μμ λ‘μμ§λ―λ‘ μμνκ² κΈ°λ₯ꡬνμ μ΄μ μ λ§μΆ° μ€κ³κ°λ₯
ν¨μν νλ‘κ·Έλλ° νΉμ§
- ν¨μλ₯Ό μΌκΈ κ°μ²΄(First-class object)λ‘ λ€λ£¬λ€
- μΌκΈκ°μ²΄λ μ λ¬μΈμλ‘ μ λ¬λ μ μλ€
- μΌκΈκ°μ²΄λ λμ νλ‘νΌν° ν λΉμ΄ κ°λ₯
- μΌκΈκ°μ²΄λ λ³μλ λ°μ΄ν° ꡬ쑰 μμ λ΄μ μ μλ€
- μΌκΈκ°μ²΄λ λ°ν κ°μΌλ‘ μ¬μ©ν μ μλ€
- μΌκΈκ°μ²΄λ ν λΉν λ μ¬μ©λ μ΄λ¦κ³Ό κ΄κ³μμ΄ κ³ μ ν κ°μ²΄λ‘ κ΅¬λ³ κ°λ₯
- κ³ μ°¨ν¨μ (High-orde Function)
- ν¨μμ μΈμλ‘λ‘ ν¨μλ₯Ό λ°κ±°λ λ°νκ°μΌλ‘ ν¨μλ₯Ό λ°ννλ ν¨μ
- μ€μννΈμμ ν¨μλ μΌκΈκ°μ²΄λ‘ μ·¨κΈλκΈ°μ λ€λ₯Έ ν¨μμ μΈμλ‘ μ¬μ©λ μ μλ€
- μ΄λ₯Ό ν΅ν΄ ν¨μμ λ΄λΆμ½λλ₯Ό 건λλ¦¬μ§ μκ³ μΈλΆμμ μ€ν νλ¦μ μΆκ°ν μ μκ²λλ©° ν¨μμ μ¬νμ©μ±, μ¬μ¬μ©μ±μ΄ μ¦κ°
- λΆλ³μ± (Immutablility)
- ν¨μν νλ‘κ·Έλλ°μμλ λ°μ΄ν°κ° λ³ν μ μλλ°, μ΄λ₯Ό λΆλ³μ± λ°μ΄ν°λΌκ³ νλ€.
- λ°μ΄ν° λ³κ²½μ΄ νμν κ²½μ°, μλ³Έ λ°μ΄ν° ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ κ·Έ λ°μ΄ν°λ₯Ό 볡μ¬λ³Έμ λ§λ€μ΄ κ·Έ μΌλΆλ₯Ό λ³κ²½νκ³ , λ³κ²½ν 볡μ¬λ³Έμ μ¬μ©ν΄ μμ μ μ§ννλ€.
- λ°μ΄ν° λ³ν : ν¨μν νλ‘κ·Έλλ°μ λ°μ΄ν° λ³κ²½μ΄ λΆκ°λ₯νκΈ° λλ¬Έμ κΈ°μ‘΄ λ°μ΄ν°μ 볡μ¬λ³Έμ λ§λ€μ΄ μ£Όλ λꡬλ€μ΄ νμνλ€.
- κ°λ³ λ³μμ μν΄ λ°μνλ κ²½ν©(race)쑰건, κ΅μ°©μν(deadlock), λμ μ λ°μ΄νΈ(concurrent update)λ¬Έμ λ‘λΆν° μμ λ‘λ€.
- μμ ν¨μ (Pure function)
- μμ ν¨μλ ν¨μν νλ‘κ·Έλλ°μ νμν κ°λ μΌλ‘ μλ 쑰건μ λ§μ‘±νλ ν¨μλ₯Ό λ»νλ€.
- λμΌν μ λ ₯μλ νμ κ°μ κ°μ λ°νν΄μΌ νλ€.
- ν¨μμ μ€νμ νλ‘κ·Έλ¨μ μ€νμ μν₯μ λ―ΈμΉμ§ μμμΌ νλ€. (Side effect κ° μμ΄μΌ νλ€)
Reactive Programming, λ°μν νλ‘κ·Έλλ°
- Reactive Programmingμ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ κΈ°λ°μ λκ³ κ·Έκ²μ λ°μν΄μ 무μΈκ°λ₯Ό ν μ μλ νλ‘κ·Έλλ° ν¨λ¬λ€μ
- λΉλκΈ°μ μΈ λ°μ΄ν° νλ¦κ³Ό κ·Έ λ³νλ λ§μΉ κ°κ³Ό κ°μμ μ΄λ₯Ό κ΄μ°°νκ±°λ νν°λ§νκ±°λ λ€λ£° μ μμΌλ©° μλ‘μ΄ μ¬μ©μλ₯Ό μν μλ‘μ΄ νλ¦μ λ§λ€κΈ° μν΄ λ€λ₯Έ νλ¦κ³Ό λ³ν©ν μλ μλ€
- λ°μν νλ‘κ·Έλλ°μ Functional Programmingμ νμ©
=> λ³νν μ μλ μνμ μ½κ² λμ²ν μ μκ³ μ΄λ²€νΈλ€μ μμ,μ¬μ¬μ©μ±μ ν₯μ μν¬ μ μλ€
=> λΉλκΈ°μ(μ¬λ¬ μμ μ λμμ μ§ν) νλμ μ½κ³ μμ νκ² λ€λ£° μ μλλ‘ νλ€ - μ€μννΈλ Reactive Programmingμ μν΄ λ€μκ³Ό κ°μ κΈ°λ₯ μ 곡
- @escaping : handler to catch the end point of asynchoronous task
- Dispatchqueue : For making task asynchoronously
- willSet, didSet : makes observing specific variable reactively
RxSwift
- RxSwift = Reactive eXtensions + Swift
- Rxλ Reactive Programming λ°μν νλ‘κ·Έλλ°μΌλ‘ λμ΄μλ API
- RxSwiftλ₯Ό μ΄μ©νλ©΄ Reactive Programming μ μ½κ² ꡬνν μ μμΌλ©°, RxSwift μ΄μ©μ λ€μκ³Ό κ°μ μ₯μ μ΄ μλ€
- RxSwift makes reactive code readable and short
-> You don’t need to use those Dispatchqueue, willSet, and DidSet - RxSwift operators make stream extensive
- RxSwift makes reactive code readable and short
'iOS π > iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
iOS Code Signing (0) | 2021.06.25 |
---|---|
RxSwift (0) | 2021.05.18 |
viewcontrollerκ° λ°μ΄ν° μ λ¬νλ 6κ°μ§ λ°©λ² (0) | 2021.03.02 |
Managing iOS App's Life Cycle (0) | 2021.02.24 |
Responding to the Launch of Your App (0) | 2021.02.24 |