1. νλ‘κ·Έλλ° ν¨λ¬λ€μ
- νλ‘κ·Έλλ° μ€νμΌμ μλ―Ένλ©°, μ 체μ μΈ νλ‘κ·Έλλ° λ°©μμ λ§ν¨
- λνμ μΌλ‘ μ μ°¨μ , κ°μ²΄μ§ν₯, ν¨μν νλ‘κ·Έλλ°μ΄ μ‘΄μ¬νλ€.
- ν¬κ² λΆλ₯νλ©΄ λͺ
λ Ήν / μ μΈν νλ‘κ·Έλλ°μΌλ‘ λλ μ μλ€.
1-1. λͺ
λ Ήν(Imperative)νλ‘κ·Έλλ°
: νλ‘κ·Έλλ° μνμ μνλ₯Ό λ³κ²½μν€λ ꡬ문μ κ΄μ μμμ μ°μ°μ μ€λͺ
(μ»΄ν¨ν°κ° μνν λͺ
λ Ήλ€μ μμλλ‘ μ¨λμκ²)
- μ μ°¨μ νλ‘κ·Έλλ°, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- λͺ
λ Ήν νλ‘κ·Έλλ° μΈμ΄: C, C++, Java, Pascal, Ruby
1-2. μ μΈν(Declarative)νλ‘κ·Έλλ°
: νμν κ²μ λ¬μ±νλ κ³Όμ μ κΈ°μ νκΈ°λ³΄λ€ νμν κ²μ΄ μ΄λ€ κ²μΈμ§λ₯Ό κΈ°μ νλ κ²μ μ΄μ μ λ§μΆλ νλ‘κ·Έλλ° κ΅¬μ‘°
: λͺ©νλ₯Ό λͺ
μνκ³ , μκ³ λ¦¬μ¦μ λͺ
μνμ§ μλ κ²μΌλ‘ '무μ'μ μ§μ€νλ νλ‘κ·Έλλ°('μ΄λ»κ²'μ λν λΆλΆμ μΆμν)
- ν¨μν νλ‘κ·Έλλ° :
- μ μΈν νλ‘κ·Έλλ° μΈμ΄ : HTML, Lisp, Haskell, Prolog, SQL, XML
2. ν¨μν νλ‘κ·Έλλ°
- μλ£μ²λ¦¬λ₯Ό μνμ ν¨μμ κ³μ°μΌλ‘ μ·¨κΈνκ³ , μνμ κ°λ³λ°μ΄ν°λ₯Ό λ©λ¦¬νλ νλ‘κ·Έλλ° ν¨λ¬λ€μ.
- μμν¨μλ₯Ό μ‘°ν©νκ³ νλ‘κ·Έλ¨μ λ§λλ λ°©λ²μ΄λ€.
- ν¨μν νλ‘κ·Έλλ° μΈμ΄ 3λμ₯ : Clojure, Scala(μ€λ¬΄μ λμ
νκΈ° μ’μ), Haskell(νκ³ μ ν΅ν μμ ν¨μν μΈμ΄)
- μλ°μ€ν¬λ¦½νΈ, μ½νλ¦°, νμ΄μ¬ λ±μλ μ΅κ·Ό ν¨μν νλ‘κ·Έλλ° λ¬Έλ²μ΄ μΆκ°λμλ€.
- μΈλΆνκ²½μΌλ‘λΆν° λ
립μ . μ£Όμ΄μ§ μμ
λ§ νλ€.
μνμ μ리μ λ°μ νκ² μ°κ΄. λ§€μ°λλ° μκ°μ΄ μ€λκ±Έλ¦¬κ³ λν΄..
κ·Έλμ μ¬λμ μ¬κ³ λ°©μκ³Ό κ°κΉμ΄ μ μ°¨μ§ν₯, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄ λ 보νΈμ μΌλ‘ λ§μ΄ μ°μ¬μ§κ³ μμ.
λ°©λν λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ³μ°ν΄μ λ³λ ¬μ μΌλ‘ μμ μ μΌλ‘ μ²λ¦¬νλ κ²μ μ€μμ±μ΄ λΆκ°λλ©΄μ
ν¨μν νλ‘κ·Έλλ° μΈμ΄κ° λ€μ μ£Όλͺ©μ λ°κΈ° μμνκ².
3. ν¨μν νλ‘κ·Έλλ°μ νΉμ§
3-1. μμν¨μ Pure function
- ν¨μμ μ€νμ΄ νλ‘κ·Έλ¨ μ€νμ μν₯μ λ―ΈμΉμ§ μμμΌ νλ ν¨μ
- ν¨μ λ΄λΆμμ μΈμμ κ°μ λ³κ²½νκ±°λ νλ‘κ·Έλ¨ μνλ₯Ό λ³κ²½νλ side effect κ° μλ κ².
- ν¨μμμ μΈλΆμ μνκ°μ μ°Έμ‘°νκ±°λ λλ μΈλΆμ μνλ₯Ό λ³κ²½νλ κ²μ μμν¨μλΌ λ³Ό μ μλ€!
- λμΌν μΈμλ₯Ό λ£μμ λ νμ λμΌν κ²°κ³Όκ°μ λ°ννκ³ , μΈμ μ μΈλμλμ§ μΈλΆμ μν₯λ°μ§ μλλ‘ μμ±ν΄μΌν.
3-2. λΉμν Stateless , λΆλ³μ± Immutability
- ν¨μν νλ‘κ·Έλλ°μμμ λ°μ΄ν°λ λ³νμ§ μλ λΆλ³μ±μ μ μ§ν΄μΌνλ€.
- λ°μ΄ν°μ λ³κ²½μ΄ νμν κ²½μ° μλ³Έ λ°μ΄ν° ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ ,
κ·Έ 볡μ¬λ³Έμ λ§λ€μ΄ κ·Έ μΌλΆλ₯Ό λ³κ²½νκ³ λ³κ²½ν 볡μ¬λ³Έμ μ¬μ©ν΄ μμ
μ μ§ν
(μ λ¬λ λ°μ΄ν°λ₯Ό λ³κ²½νλκ² μλλΌ μλ‘μ΄ λ²μ μ μλ‘μ΄ μ€λΈμ νΈλ₯Ό λ§λ€μ΄μ κ²°κ³Όκ°μΌλ‘ μ λ¬ν΄μΌν¨)
- λ³κ²½νμ§ μμμΌλ‘μ λΆμμ©(ν¨μνΈμΆμ μΈλΆμνλ³κ²½, μμμΉλͺ»ν μλ¬λ°μ λ±)μ λ§λ€μ§ μμ
- λ©μ°λ λ© νκ²½(μ¬λ¬ μ€λ λκ° λμμ νλμ μμμ 곡μ νκ³ μκΈ°λλ¬Έμ κ°μ μμμ λκ³ κ²½μμνμ κ°μ λ¬Έμ κ° λ°μ)μμλ μμ μ μΌλ‘ λμνλ€.
3-3. μ μΈν ν¨μ Expressions
- μ μΈνμ "무μ"μ ν κ²μΈκ°μ μ£Όλͺ© / λͺ
λ Ήνμ 무μμ "μ΄λ»κ²"ν κ²μΈκ°μ μ£Όλͺ©
- if, for, switchμ κ°μ λͺ
λ Ήλ¬Έμ μ¬μ©νμ§ μκ³ νλ‘κ·Έλλ°νλ€.
3-4. 1κΈ κ°μ²΄μ κ³ μ°¨ν¨μ First-class, Higher-order functions
- 1κΈκ°μ²΄μ νΉμ§ : λ³μλ λ°μ΄ν° ꡬ쑰 μμ λ΄μ μ μλ€. νλΌλ―Έν°λ‘ μ λ¬ν μ μλ€. λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
ν λΉλ μ΄λ¦κ³Ό κ΄κ³μμ΄ κ³ μ ν ꡬλ³μ΄ κ°λ₯, λμ μΌλ‘ νλ‘νΌν° ν λΉ κ°λ₯.
- κ³ μ°¨ν¨μμ νΉμ§ : ν¨μλ₯Ό μΈμλ‘μ¨ μ λ¬ν μ μμ΄μΌνλ€. ν¨μμ λ°νκ°μΌλ‘ λ λ€λ₯Έ ν¨μλ₯Ό μ¬μ©ν μ μλ€.
4. ν¨μν νλ‘κ·Έλλ°μ μ₯μ
- λμ μμ€μ μΆμν μ 곡(볡μ‘ν μλ£, λͺ¨λ, μμ€ν
λ±μΌλ‘λΆν° ν΅μ¬ κ°λ
, κΈ°λ₯μ κ°μΆλ €λ)
* ν¨μμ κΈ°λ³ΈμμΉ 'ν¨μλ νκ°μ§ λμλ§ ν΄μΌν¨' => μ¬λ¬ λμμ λμμ μννλ©΄, λ€λ₯Έ ν¨μ, λͺ¨λκ³Όμ μ’
μμ±μ΄ μ»€μ Έ μ μ§λ³΄μκ° μ΄λ €μμ§.
- ν¨μ λ¨μμ μ½λ μ¬μ¬μ© μμ
-. λΆλ³μ±μ μ§ν₯νλ―λ‘ νλ‘κ·Έλ¨ λμ μμΈ‘μ΄ μ½λ€
5. ν¨μν νλ‘κ·Έλλ°μ λ¨μ
- μ½λμ κ°λ
μ±μ΄ μ’μ§ μμ μ μμ
- λ°λ³΅μ forλ¬Έμ΄ μλ μ¬κ·ν¨μλ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λλ°(deep copy), μ¬κ·μ μ½λμ€νμΌμ 무ν루νμ λΉ μ§ μ μλ€.
* μ¬κ·ν¨μ : ν¨μ μμ μμ μ ν¨μλ₯Ό λ€μ νΈμΆνλ ν¨μ. μμ μ λ‘μ§μ λ΄λΆμ μΌλ‘ λ°λ³΅νλ€κ° μΌμ μ‘°κ±΄μ΄ λ§μ‘±λλ©΄
ν¨μλ₯Ό μ΄ννμ¬ κ²°κ³Όλ₯Ό λμΆνλ€.
- μμν¨μμ μ¬μ©μ μ¬μΈ μ μμΌλ, μ‘°ν©μ μ½μ§ μλ€.
6. μ 리
ui μ΄ν리μΌμ΄μ
μ νΉμ±μ λ§μ μνλ³νκ° μΌμ΄λλ―λ‘ μμν¨μννλ‘κ·Έλλ°λ§μ μ΄μ©ν΄μλ λ¬΄λ¦¬κ° μλ€κ³ ν¨.
λ°λΌμ 'ν¨μν λ°μν νλ‘κ·Έλλ°'μ μ΄μ©νκ±°λ, κ°μ²΄μ§ν₯νλ‘κ·Έλλ°μμ ν¨μννλ‘κ·Έλλ°μ νΉμ§μ
κ²°ν©ν΄ μμ μ μΈ νλ‘κ·Έλ¨μ νλ μμΌλ‘ νμ©.
μνλ λͺ©νμ λ°λΌ μ μ ν κ²μ μ κ³¨λΌ μ¬μ©ν΄νκ³ , μ¬λ¬ ν¨λ¬λ€μμ μ μ΄ν΄νκ³ λ루 μμμΌ νλ€.