π± ν¨μν νλ‘κ·Έλλ°μ΄λ?
βν¨μμ²λΌ μκ°νκ³ , μνμ²λΌ μ½λ©νμβ
ν¨μν νλ‘κ·Έλλ°(Functional Programming, FP)μν¨μ(function)λ₯Ό μ€μ¬
μΌλ‘ μ¬κ³ νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄μμ.
π‘ ν΅μ¬ κ°λ μμ½
- ν¨μλ κ°μ²λΌ λ€λ£¬λ€ (μΌκΈ κ°μ²΄)
- μνλ₯Ό λ°κΎΈμ§ μλλ€ (λΆλ³μ±)
- μμ ν¨μλ§ μ¬μ©νλ€
- ν¨μλ₯Ό μ‘°ν©ν΄μ μλ‘μ΄ ν¨μλ₯Ό λ§λ λ€ (ν©μ±)
π§ μ ν¨μν νλ‘κ·Έλλ°μ μ¨?
μ΄μ | μ€λͺ |
---|---|
β κ°λ μ±μ΄ λλ€ | ν¨μ μμ²΄κ° μλ―Έ μλ λ¨μκ° λ¨ |
β ν μ€νΈκ° μ½λ€ | κ°μ μ λ ₯ β κ°μ μΆλ ₯ (μμν¨μ) |
β λ³λ ¬ μ²λ¦¬μ κ°νλ€ | μνλ₯Ό λ°κΎΈμ§ μμΌλκΉ μΆ©λ μμ |
β μ€λ₯κ° μ€μ΄λ λ€ | λΆμμ©(side effect)μ μμ λκΉ |
π λνμ μΈ ν¨μν μΈμ΄λ€
μΈμ΄ | νΉμ§ |
---|---|
JavaScript | μΌκΈ ν¨μ μ§μ, ν¨μν κΈ°λ² λ§μ΄ μ |
Python | map , filter , lambda λ± ν¨μν μ€νμΌ κ°λ₯ |
Haskell | μμ ν¨μν μΈμ΄μ λνμ£Όμ |
Scala, Clojure | JVM κΈ°λ° ν¨μν μΈμ΄ |
Elm, F# | μΉ/λ·λ· κΈ°λ°μ ν¨μν μΈμ΄ |
β¨ μμ μ½λλ‘ λ³΄λ ν¨μν
β JavaScript: λ°°μ΄ μ²λ¦¬
const numbers = [1, 2, 3, 4, 5]; // μ§μλ§ μ κ³±ν΄μ μλ‘μ΄ λ°°μ΄ λ§λ€κΈ°
const result = numbers.filter(n => n % 2 === 0)
.map(n => n * n);
console.log(result); // [4, 16]
β Python: map + filter + lambda
numbers = [1, 2, 3, 4, 5]
# μ§μλ§ μ κ³±
result = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers)))
print(result) # [4, 16]
β Haskell: μ§μ§ ν¨μν μΈμ΄
squaresOfEven xs = map (^2) (filter even xs)
main = print (squaresOfEven [1,2,3,4,5])
-- κ²°κ³Ό: [4, 16]
π μμ ν¨μλ?
// μμ ν¨μ
function add(a, b) {
return a + b;
}
// λΉμμ ν¨μ (μΈλΆ μν μμ‘΄)
let count = 0;
function increment() {
count++;
}
μμ ν¨μλ κ°μ μ λ ₯μ΄λ©΄ νμ κ°μ κ²°κ³Όλ₯Ό λ°ννκ³ , μΈλΆ μνλ₯Ό λ³κ²½νμ§ μμμ!
π ν¨μν vs λͺ λ Ήν
λͺ λ Ήν (Imperative) | ν¨μν (Functional) |
---|---|
μν, λ°λ³΅λ¬Έ μ€μ¬ | ν¨μ, μ‘°ν© μ€μ¬ |
for , while μ¬μ© |
map , reduce , filter μ¬μ© |
μ½λ κΈΈμ΄μ§ | κ°κ²°ν νν |
π¬ λ§λ¬΄λ¦¬ νλ§λ
ν¨μν νλ‘κ·Έλλ°μ μ²μμ λ―μ€ μ μμ§λ§, μ½λμ μλλ₯Ό λͺ ννκ² λλ¬λ΄κ³ , μ€μλ₯Ό μ€μ΄λ©°, μ μ§λ³΄μλ₯Ό μ½κ² ν΄μ£Όλ λ©μ§ ν¨λ¬λ€μμ΄μμ.
'Programming Mechanisms' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
무ν 루ν(Infinite Loop)μ μνμ± (0) | 2025.04.22 |
---|---|
λ³μ μλμ(Shadowing) (0) | 2025.04.04 |