μ£Όλ‹ˆμ–΄ 개발자의 개인 곡뢀 과정을 κΈ°λ‘ν•©λ‹ˆλ‹€.

νŒ¨λŸ¬λ‹€μž„: ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ κ°œλ°œμžμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œν•˜κ³  κ²°μ •ν•˜λŠ” 역할을 ν•œλ‹€

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

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) ν‘œν˜„ν•œλ‹€.”