Programming Mechanisms

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

yoooCo 2025. 4. 1. 18:31

🌱 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

β€œν•¨μˆ˜μ²˜λŸΌ μƒκ°ν•˜κ³ , μˆ˜ν•™μ²˜λŸΌ μ½”λ”©ν•˜μžβ€
ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(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