πŸŽ„ μ„±μž₯일지 3.1

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

🌳 ν‚€μ›Œλ“œ (1.0)
μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ 정리, 좔후에 λ³΄λ©΄μ„œ 슀슀둜 μ„€λͺ…
πŸ‰ κ²½ν—˜ μœ„μ£Όλ‘œ (2.0)
λ‹¨μˆœ 정보λ₯Ό μ „λ‹¬ν•˜κΈ°λ³΄λ‹€ 무엇을 λ°°μ› κ³  μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ 짧고 κ°„λ‹¨ν•˜κ²Œ μž‘μ„±
❄️ 정해진 ν…œν”Œλ¦Ώμ— λ§žμΆ°μ„œ (3.0)
ν‚€μ›Œλ“œ, κ²½ν—˜ λͺ¨λ‘ μ’‹λ‹€. λ‹€λ§Œ 맀일 μž‘μ„±ν•˜κΈ°λ‘œ 마음 λ¨Ήμ€λ§ŒνΌ ν•΅μ‹¬λ§Œ κ°„κ²°ν•˜κ²Œ 정리할 수 있게 ν…œν”Œλ¦Ώμ„ μž‘μ„± (3.1) 230102λΆ€ν„° μ‹œμž‘λ˜λŠ” ν•™μŠ΅μ— κ΄€ν•œ λ‚΄μš© μΆ”κ°€

πŸ”‘ 였늘의 ν‚€μ›Œλ“œ

μˆœμˆ˜ν•¨μˆ˜(Pure Function)

  • λΆ€μˆ˜ 효과(side effect)κ°€ μ—†λŠ” ν•¨μˆ˜.
  • μ–΄λ–€ ν•¨μˆ˜μ— λ™μΌν•œ 인자λ₯Ό μ£Όμ—ˆμ„ λ•Œ, 항상 같은 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
  • 즉, μš°λ¦¬κ°€ μˆ˜ν•™μ—μ„œ 배우던 ν•¨μˆ˜μ˜ κ°œλ…

λΆˆλ³€μ„±(Immutability)

  • λ³€ν•˜μ§€ μ•ŠλŠ” μ„±μ§ˆ
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ›μ‹œ νƒ€μž…μ€ 기본적으둜 λΆˆλ³€μ„±μ„ κ°–λŠ”λ‹€.
  • κ°μ²΄λŠ” 기본적으둜 가변성을 κ°–λŠ”λ‹€.
    • λΆˆλ³€ν•˜λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ Object.freeze(), rest parameter을 ν†΅ν•œ 객체 λ°˜ν™˜ λ“±μ˜ 방법이 μžˆλ‹€.

μ°Έμ‘° 투λͺ…μ„±(Referential Transparency)

  • ν•¨μˆ˜κ°€ ν•¨μˆ˜μ˜ μ™ΈλΆ€ 영ν–₯을 받지 μ•ŠλŠ” 것
  • λ™μΌν•œ μž…λ ₯에 λŒ€ν•΄ λ™μΌν•œ 값을 λ°˜ν™˜ν•˜λŠ” μ„±μ§ˆ

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

  • λΆ€μˆ˜ 효과(side effect)λ₯Ό μ—†μ• κ³  순수 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ λͺ¨λ“ˆν™” μˆ˜μ€€μ„ λ†’μ΄λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

λΆ€μˆ˜ 효과(side effect)

  • μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것 λ˜λŠ” ν•¨μˆ˜μ— μ „λ‹¬λœ λ§€κ°œλ³€μˆ˜μ˜ μƒνƒœλ₯Ό 직접 λ³€κ²½ν•˜λŠ” 것

κ³ μ°¨ν•¨μˆ˜

  • ν•¨μˆ˜λ₯Ό 인자둜 μ „λ‹¬λ°›λŠ” ν•¨μˆ˜
  • ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
  • 인자둜 받은 ν•¨μˆ˜λ₯Ό ν•„μš”ν•œ μ‹œμ μ— ν˜ΈμΆœν•˜κ±°λ‚˜ ν΄λ‘œμ €λ₯Ό μ΄μš©ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 일급 객체이기에 κ°€λŠ₯ν•˜λ‹€!

ν΄λ‘œμ €

  • μ–΄λ–€ ν•¨μˆ˜(μ™ΈλΆ€ν•¨μˆ˜) Aμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜ aλ₯Ό μ°Έμ‘°ν•˜λŠ” λ‚΄λΆ€ν•¨μˆ˜ Bλ₯Ό μ™ΈλΆ€λ‘œ 전달할 경우, A의 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ’…λ£ŒλμŒμ—λ„ λ³€μˆ˜ aκ°€ 사라지지 μ•ŠλŠ” ν˜„μƒ

읡λͺ…ν•¨μˆ˜

  • 읡λͺ…ν•¨μˆ˜ μžμ²΄λŠ” μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ, ν•¨μˆ˜μ˜ 이름이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
    function () {
    console.log("Hello World! Hello Jayden!");
    }
  • λ¦¬ν„°λŸ΄ λ°©μ‹μœΌλ‘œ λ³€μˆ˜μ— λ‹΄κ²¨μ„œ μ‚¬μš©ν•˜λ„λ‘ λ˜μ–΄μžˆλ‹€.
  • 일반적으둜 ν•¨μˆ˜λ₯Ό μž¬μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•œ 번만 μ“°κ³  싢을 λ•Œ, μ‚¬μš©ν•œλ‹€.
  • ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό 달리 ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ μΌμ–΄λ‚˜μ§€ μ•Šμ•„, λ©”λͺ¨λ¦¬λ₯Ό μ•„λ‚„ 수 μžˆλ‹€.

참고자료

πŸ“ μš”μ•½ 및 ν•˜λ£¨ 간단 회고

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— ν‘Ή λΉ μ Έμžˆμ—ˆλŠ”λ°(ν˜„μž¬ 진행 쀑), μ˜€λŠ˜λΆ€ν„°λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ κ³΅λΆ€ν•˜κ²Œ 됐닀. μ†”μ§νžˆ μ²˜μŒμ—” 이제 쑰금 객체 λ‹¨μœ„λ‘œ 세상을 바라보고 μ½”λ“œλ₯Ό μ“Έ 쀄 μ•Œκ²Œ λ˜μ—ˆκΈ°μ—, 쬐끔 괜히 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ λ§˜μ— μ•ˆλ“€μ—ˆλ‹€.(객체지ν–₯ 곡뢀 λ°©ν•΄ν•˜λŠ” λŠλ‚Œ) 그런데 이게 웬걸… 아직 더 μ•Œμ•„μ•Όν•  게 λ§Žμ§€λ§Œ, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ κ°•μ‘°ν•˜λŠ” μˆœμˆ˜ν•¨μˆ˜, λΆ€μˆ˜νš¨κ³Ό 쀄이기, μ°Έμ‘° 투λͺ…μ„± λ“±μ˜ κ°œλ…μ€ ꡉμž₯히 μ‹ μ„ ν–ˆκ³  μž¬λ―Έμžˆμ—ˆλ‹€. 어릴 적뢀터 μˆ˜ν•™μ„ μ’‹μ•„ν–ˆλ˜ 터라, μ™ΈλΆ€ λ³€μˆ˜λΌλŠ” κ°œλ…μ‘°μ°¨ μ—†λŠ” μˆ˜ν•™μ—μ„œμ˜ ν•¨μˆ˜λ₯Ό μ μš©ν•˜λŠ” 게 μž¬λ―Έμžˆμ—ˆλ‹€. 단지, κ·Έλ ‡κ²Œ μž‘κ²Œ λ‚˜λˆ„μ–΄μ§„ ν•¨μˆ˜λ“€μ„ κ΅¬μ„±ν•˜κ³  μ‘°ν•©ν•˜λŠ” κ³Όμ •μ—μ„œ μ‚¬μš©λ˜λŠ” κ³ μ°¨ν•¨μˆ˜, ν•¨μˆ˜ 전달, ν΄λ‘œμ € 등은 아직은 μͺΌμ˜€κΈˆ μ–΄λ ΅λ‹€. λ‹€ν–‰νžˆ λ°°μ—΄μ—μ„œμ˜ κ³ μ°¨ν•¨μˆ˜λ“€μ€ μ•Œκ³ λ¦¬μ¦˜μ„ ν’€λ©΄μ„œ 자주 μ‚¬μš©ν•΄μ„œ μƒλ‹Ήνžˆ νŽΈλ¦¬ν•˜κΈ΄ ν–ˆλ‹€. μ˜λ„μ μœΌλ‘œ if, switchλ¬Έκ³Ό 같은 뢄기점과 while, for λ“±μ˜ λ°˜λ³΅λ¬Έμ„ κ³ μ°¨ν•¨μˆ˜λ‘œ λ°”κΏ”μ„œ μ μš©ν•˜λ‹ˆ 직관적이고 κ·Έ 쀑간 쀑간 과정이 ν•œλˆˆμ— μ‰½κ²Œ λ“€μ–΄μ˜¨λ‹€. 객체지ν–₯ λ•Œμ²˜λŸΌ λ­”κ°€ μ‹œμ•Όκ°€ ν™•μž₯λ˜λŠ” 기뢄이 λ“€λž‘λ§λž‘ν•˜κ³  μžˆλ‹€!!! μ–Όλ₯Έ ν•¨μˆ˜ν˜•μœΌλ‘œλ„ 세상을 바라볼 수 있게 되면 μ’‹κ² λ‹€ :)

였늘의 μž˜ν•œ 점

  • 객체지ν–₯으둜 κ΅¬ν˜„λ˜μ–΄μžˆλŠ” μ½”λ“œλ₯Ό μ „λΆ€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ κ΅¬ν˜„
  • 더 λ‚˜μ•„κ°€ ν•¨μˆ˜λ“€μ„ λͺ¨λ“ˆν™”
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— 더 μ΅μˆ™ν•΄μ§€κ³  μžˆλŠ” 점

였늘의 μ•„μ‰¬μš΄ 점

  • typescript compile μ‹œ tsconfig의 target μ˜΅μ…˜κ³Ό cliμ—μ„œ μ£ΌλŠ” β€”target의 μ˜΅μ…˜ 차이λ₯Ό μ •ν™•νžˆ λͺ¨λ₯΄κ² λ‹€.(μ—΄μ‹¬νžˆ 찾아봐도 λ­”κ°€ μ†μ‹œμ›ν•œ 닡이 μ—†λ‹€ γ… )