μ£Όλμ΄ κ°λ°μμ κ°μΈ κ³΅λΆ κ³Όμ μ κΈ°λ‘ν©λλ€.
ν¨λ¬λ€μ: νλ‘κ·Έλλ° ν¨λ¬λ€μμ κ°λ°μμκ² νλ‘κ·Έλλ°μ κ΄μ μ κ°κ²νκ³ κ²°μ νλ μν μ νλ€
ν¨μν νλ‘κ·Έλλ°
functional programming: μλ£μ²λ¦¬λ₯Ό μνμ ν¨μμ κ³μ°μΌλ‘ μ·¨κΈνκ³ μνμ κ°λ³ λ°μ΄ν°λ₯Ό λ©λ¦¬νλ νλ‘κ·Έλλ° ν¨λ¬λ€μ
ν¨μν νλ‘κ·Έλλ°μ κ³μ°μ μνμ ν¨μμ μ‘°ν©μΌλ‘ μκ°νλ λ°©μμ λ§νλ€. μ΄κ²μ μΌλ°μ μΈ νλ‘κ·Έλλ° μΈμ΄μμ ν¨μκ° νΉμ λμμ μννλ μν μ λ΄λΉνλ κ²κ³Όλ λ°λλλ κ°λ μΌλ‘, ν¨μλ₯Ό μνν΄λ ν¨μ μΈλΆμ κ°μ΄ λ³κ²½λ μ μλ€.
-
λͺ λ Ήν νλ‘κ·Έλλ°: νλ‘κ·Έλλ°μ μνμ μνλ₯Ό λ³κ²½μν€λ ꡬ문μ κ΄μ μμ μ°μ°μ μ€λͺ νλ λ°©μ
- μ μ°¨μ§ν₯ νλ‘κ·Έλλ°: μνλμ΄μΌ ν μ°μμ μΈ κ³μ° κ³Όμ μ ν¬ν¨νλ λ°©μ (C, C++)
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°: κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈμμ©μ νν (C++, Java, C#)
-
μ μΈν νλ‘κ·Έλλ°(declarative programming): μ΄λ€ λ°©λ²μΌλ‘ ν΄μΌ νλμ§(How)λ₯Ό λνλ΄κΈ°λ³΄λ€ 무μ(What)κ³Ό κ°μμ§λ₯Ό μ€λͺ νλ λ°©μ
- ν¨μν νλ‘κ·Έλλ°: μμ ν¨μλ₯Ό μ‘°ν©νκ³ μννΈμ¨μ΄λ₯Ό λ§λλ λ°©μ (ν΄λ‘μ , νμ€μΌ, 리μ€ν)
- λ°μν νλ‘κ·Έλλ°(Reactive Programming): μ μΈν νλ‘κ·Έλλ°μ΄λΌκ³ λ λΆλ¦¬λ©°, λͺ λ Ήν νλ‘κ·Έλλ°(imperative programming)μ λ°λλ§
λͺ λ Ήνκ³Ό μ μΈνμ νλ‘κ·Έλλ° λΉκ΅
- λͺ λ Ήν: μκ³ λ¦¬μ¦μ λͺ μνκ³ λͺ©νλ λͺ μ μν¨.
- μ μΈν: μκ³ λ¦¬μ¦ λͺ μνμ§ μκ³ λͺ©νλ§ λͺ μ.
- βλͺ λ Ήν νλ‘κ·Έλλ°μ μ΄λ»κ² ν κ²μΈκ°(How)λ₯Ό νννκ³ , μ μΈν νλ‘κ·Έλλ°μ 무μμ ν κ²μΈκ°(What) νννλ€.β
ν¨μν νλ‘κ·Έλλ°μ νΉμ§
immutable data
ν¨μν νλ‘κ·Έλλ°μμλ λ°μ΄ν°κ° λ³ν μ μλλ°, μ΄λ₯Ό λΆλ³μ± λ°μ΄ν°λΌκ³ νλ€. (μλ°μ€ν¬λ¦½νΈλ κ°λ₯νμ§λ§ λΆκ°λ₯ν μΈμ΄λ€μ΄ μλ€)
λ°μ΄ν° λ³κ²½μ΄ νμν κ²½μ°, μλ³Έ λ°μ΄ν° ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ κ·Έ λ°μ΄ν°λ₯Ό 볡μ¬λ³Έμ λ§λ€μ΄ κ·Έ μΌλΆλ₯Ό λ³κ²½νκ³ , λ³κ²½ν 볡μ¬λ³Έμ μ¬μ©ν΄ μμ
μ μ§ννλ€.
Array.map
, Array.reduce
const
ν€μλμ λΆλ³μ ꡬλΆν΄μΌ νλ€.const
λObject
λ‘ μ¬μ©λλ κ²½μ° λ³κ²½ κ°λ₯νλ€.
- immutable vs mutable
immutable
μ΄λ λ§ κ·Έλλ‘ λ³κ²½ λΆκ°λ₯ν¨μ μλ―Έ.immutable
κ°μ²΄λ κ°μ²΄κ° κ°μ§κ³ μλ κ°μ λ³κ²½ν μ μλ κ°μ²΄immutable
κ°μ²΄μ κ°μ΄ λ³κ²½λ κ²½μ°, μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ λ³κ²½λ κ°μ μ£Όμ νμ¬ λ°νν΄μΌ νλ€.- μ΄μλ λ¬λ¦¬,
mutable
κ°μ²΄λ ν΄λΉ κ°μ²΄μ κ°μ΄ λ³κ²½λ κ²½μ° κ°μ λ³κ²½νλ€.
first class citizenμΌλ‘μμ function
ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ λ°λ₯΄κ³ μλ μΈμ΄μμμ ν¨μ(function)λ μΌκΈ κ°μ²΄(first class citizen)λ‘ κ°μ£Όλλ€. (1κΈ κ°μ²΄ (First Object, λλ 1κΈ μλ―Ό)
- λ³μλ λ°μ΄ν° ꡬ쑰μμ ν¨μλ₯Ό λ΄μ μ μλ€
- ν¨μμ νλΌλ―Έν°λ‘ μ λ¬ν μ μκ³ ,
- ν¨μμ λ°νκ°(return value)μΌλ‘ μ¬μ©ν μ μλ€.
- ν λΉμ μ¬μ©λ μ΄λ¦κ³Ό κ΄κ³μμ΄ κ³ μ ν ꡬλ³μ΄ κ°λ₯νλ€.
- λμ μΌλ‘ νλ‘νΌν° ν λΉμ΄ κ°λ₯νλ€.
μλ°μ€ν¬λ¦½νΈμμ ν¨μ(Function)λ κ°μ²΄(Object)μ΄λ―λ‘
1κΈ ν¨μ
λ‘ λΆλ¦°λ€.
ν¨μν νλ‘κ·Έλλ°μ λ°°μμΌ νλ μ΄μ ?
βμΌλ°μ μΈ νλ‘κ·Έλλ°μ κ·Έλ₯ μκ°νλ©΄ λλ κ²μ΄κ³ , ν¨μν νλ‘κ·Έλλ°μ κΈ°μ‘΄κ³Ό λ€λ₯΄κ² μκ°νλ λ°©λ²μ μλ €μ€ κ²μ΄λ€. κ·Έλ¬λ―λ‘ λΉμ μ μλ§λ μμ λ°©μμΌλ‘ μ λ λμκ°μ§ μμ κ²μ΄λ€.β
- ν¨μν νλ‘κ·Έλλ°μ νλ‘κ·Έλλ° μΈμ΄λ λ°©μμ λ°°μ°λκ²μ΄ μλλΌ ν¨μλ‘ νλ‘κ·Έλλ°νλ μ¬κ³ λ₯Ό λ°°μ°λκ²μ΄λΌκ³ ν μ μλ€.
- μ¦, μλ‘μ΄ κ³μ°λ°©λ²μ λ°°μ°λ κ²μ²λΌ μ¬κ³ μ μ νμ νμλ‘ νλ€. λ€μν μ¬κ³ λ°©μμΌλ‘ νλ‘κ·Έλλ°μ λ°λΌλ³΄λ©΄ λμ± μ μ°ν λ¬Έμ ν΄κ²°μ΄ κ°λ₯ν΄μ§λ€.
β¨ tl;dr
βοΈ ν¨μν(μ μΈν) νλ‘κ·Έλλ°μ΄λ?
- μμ ν¨μλ₯Ό μ‘°ν©νκ³ μννΈμ¨μ΄λ₯Ό λ§λλ λ°©μ βλͺ λ Ήν νλ‘κ·Έλλ°μ μ΄λ»κ² ν κ²μΈκ°(How)λ₯Ό νννκ³ , μ μΈν νλ‘κ·Έλλ°μ 무μμ ν κ²μΈκ°(What) νννλ€.β