π± κ°μ
νλ‘κ·Έλλ° ν¨λ¬λ€μ(Programming Paradigm)
- νλ‘κ·Έλλ¨Έμκ² νλ‘κ·Έλλ°μ κ΄μ μ κ°κ²νκ³ , μ½λλ₯Ό μ΄λ»κ² μμ±ν μ§ κ²°μ νλ μν
- λͺ
λ Ήν νλ‘κ·Έλλ° : 무μ(What)μ ν κ²μΈμ§ λνλ΄κΈ°λ³΄λ€ μ΄λ»κ²(How) ν κ²μΈμ§λ₯Ό μ€λͺ
νλ λ°©μ
- μ μ°¨μ§ν₯ νλ‘κ·Έλλ° : μνλμ΄μΌ ν μμ°¨μ μΈ μ²λ¦¬ κ³Όμ μ ν¬ν¨νλ λ°©μ(C, C++)
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° : κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈμμ©μ νννλ λ°©μ(Java)
- μ μΈν νλ‘κ·Έλλ° : μ΄λ»κ²(How)ν κ²μΈμ§λ₯Ό λνλ΄κΈ°λ³΄λ€ 무μ(What)μ ν κ²μΈμ§λ₯Ό μ€λͺ
νλ λ°©μ
- ν¨μν νλ‘κ·Έλλ° : μμ ν¨μλ₯Ό μ‘°ν©νκ³ μννΈμ¨μ΄λ₯Ό λ§λλ λ°©μ(ν΄λ‘μ )
π± ν¨μν νλ‘κ·Έλλ°
π κ±°μ λͺ¨λ κ²μ μμ ν¨μλ‘ λλμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κΈ°λ²μΌλ‘, μμ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν ν¨μλ₯Ό μμ±νμ¬ κ°λ μ±μ λμ΄κ³ μ μ§λ³΄μλ₯Ό μ©μ΄νκ² ν΄μ€
- λμ λ¬Έμ μ¬μ©νμ§ μλ νλ‘κ·Έλλ°μ΄λ©°, μμ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν ν¨μλ₯Ό μμ±
- λμ λ¬Έμ΄ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬μ ν λ² ν λΉλ κ°μ μλ‘μ΄ κ°μΌλ‘ λ³ν μ μμ
// 1 ~ 10κΉμ§μ κ°μ΄ iμ ν λΉλλ€
for(int i = 1 ; i < 10; i++){
System.out.println(i);
}
// processλΌλ μμμ ν¨μ
process(10, print(num));
⇒ ν¨μν νλ‘κ·Έλλ°μ 무μ(What)μ ν¬μ»€μ€λ₯Ό λλ νλ‘κ·Έλλ°μ΄κΈ° λλ¬Έμ μΆλ ₯μ νλ ν¨μ printλ₯Ό νλΌλ―Έν°λ‘ λκΈΈ μ μμ
π± νΉμ§
π λΆμν¨κ³Όκ° μλ μμ ν¨μλ₯Ό 1κΈ κ°μ²΄λ‘ κ°μ£Όνμ¬ νλΌλ―Έν°λ λ°νκ°μΌλ‘ μ¬μ©ν μ μμΌλ©° μ°Έμ‘° ν¬λͺ μ±μ μ§ν¬ μ μμ
1οΈβ£ λΆμν¨κ³Ό(Side Effect)
- λ³μμ κ°μ΄ λ³κ²½λ¨
- μλ£κ΅¬μ‘°λ₯Ό μ μ리μμ μμ
- κ°μ²΄μ νλκ°μ μ€μ
- μμΈλ μ€λ₯κ° λ°μνλ©° μ€νμ΄ μ€λ¨λ¨
- μ½μ λλ νμΌ I/Oκ° λ°μ
2οΈβ£ μμν¨μ(Pure Function)
μμ λΆμν¨κ³Όλ€μ μ κ±°ν ν¨μλ€μ μμν¨μ(Pure Function)μ΄λΌκ³ λΆλ₯΄λ©°, ν¨μν νλ‘κ·Έλλ°μμ μ¬μ©νλ ν¨μλ μ΄λ¬ν μμ ν¨μλ€μ
- Memory λλ I/O κ΄μ μμ λΆμν¨κ³Όκ° μλ ν¨μ
- ν¨μμ μ€νμ΄ μΈλΆμ μν₯μ λΌμΉμ§ μλ ν¨μ
μμ ν¨μλ₯Ό μ¬μ©νκ² λλ©΄ λ€μκ³Ό κ°μ ν¨κ³Όλ₯Ό λ°μ μ μμ
- ν¨μ μμ²΄κ° λ 립μ μ΄λ©° Side-Effectκ° μκΈ° λλ¬Έμ Threadμ μμ μ±μ 보μ₯λ°μ μ μμ
- Threadμ μμ μ±μ 보μ₯λ°μ λ³λ ¬ μ²λ¦¬λ₯Ό λκΈ°νμμ΄ μ§νν μ μμ
3οΈβ£ 1κΈκ°μ²΄ (First-Class Object) / 1κΈμλ―Ό (First-Class Citizen)
- λ³μλ λ°μ΄ν° ꡬ쑰 μμ λ΄μ μ μμ
- νλΌλ―Έν°λ‘ μ λ¬ν μ μμ
- λ°νκ°μΌλ‘ μ¬μ©ν μ μμ
- ν λΉμ μ¬μ©λ μ΄λ¦κ³Ό 무κ΄νκ² κ³ μ ν ꡬλ³μ΄ κ°λ₯ν¨
→ ν¨μν νλ‘κ·Έλλ°μμ ν¨μλ 1κΈκ°μ²΄λ‘ μ·¨κΈλ°κΈ° λλ¬Έμ μμ μμ μμ λ³Έ κ²μ²λΌ ν¨μλ₯Ό νλΌλ―Έν°λ‘ λκΈ°λ λ±μ μμ μ΄ κ°λ₯ν κ²
4οΈβ£ μ°Έμ‘° ν¬λͺ μ±(Referential Transparency)
- λμΌν μΈμμ λν΄ νμ λμΌν 겨λ‘κ°λ₯Ό λ°νν΄μΌ ν¨
- μ°Έμ‘° ν¬λͺ μ±μ ν΅ν΄ κΈ°μ‘΄μ κ°μ λ³κ²½λμ§ μκ³ μ μ§λ¨
→ μ°Έμ‘°μ ν¬λͺ νλ€λ κ²μ ν¨μλ₯Ό μ€ννμ¬λ μ΄λ ν μνμ λ³νμμ΄ νμ λμΌν κ²°κ³Όλ₯Ό λ°νν΄μ νμ λμΌνκ²(ν¬λͺ νκ²) μ€ν κ²°κ³Όλ₯Ό μ°Έμ‘°(μμΈ‘)ν μ μλ€λ κ²μ μλ―Έ
Ex.) μ΄λ€ ν¨μ Fμ μ΄λ€ μΈμμΈ xλ₯Ό λ£κ³ Fλ₯Ό μ€ννκ² λλ©΄ Fλ μ λ ₯λ μΈμμλ§ μμ‘΄νκΈ° λλ¬Έμ νμ F(x)λΌλ λμΌν κ²°κ³Όλ₯Ό μ»μ
'CS > Software Engineering' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CS] DevOps (0) | 2024.03.04 |
---|---|
[CS] MSA(λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²) (0) | 2023.12.16 |
[CS] κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (0) | 2023.12.15 |
[CS] μ μμΌ(Agile) λ°©λ²λ‘ (1) | 2023.12.06 |
[CS] TDD :: ν μ€νΈ μ£Όλ κ°λ° (1) | 2023.12.06 |