μˆ˜ν•™μ—μ„œ κΈ°μ›ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„, 순수 ν•¨μˆ˜

    μˆ˜ν•™μ—μ„œ κΈ°μ›ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„, 순수 ν•¨μˆ˜


    이전에 μž‘μ„±ν–ˆλ˜ 기쑴의 사고 방식을 κΉ¨λΆ€μˆ˜λŠ” ν•¨μˆ˜ν˜• 사고 ν¬μŠ€νŒ…μ— 이어, 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ 지ν–₯ν•˜λŠ” 관점을 μ‹€μ œ ν”„λ‘œκ·Έλž¨μ— κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ•Œκ³  μžˆμ–΄μ•Όν•˜λŠ” ν•„μˆ˜μ μΈ κ°œλ… 쀑 ν•˜λ‚˜μΈ 순수 ν•¨μˆ˜(Pure functions)에 λŒ€ν•œ 이야기λ₯Ό ν•΄λ³ΌκΉŒ ν•œλ‹€.

    2017λ…„ μ―€, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λΌλŠ” νŒ¨λŸ¬λ‹€μž„μ΄ λ– μ˜€λ₯΄λ©΄μ„œ 순수 ν•¨μˆ˜λΌλŠ” κ°œλ… λ˜ν•œ ν•¨κ»˜ μ£Όλͺ©λ°›κΈ° μ‹œμž‘ν–ˆκ³ , μ§€κΈˆλ„ ꡬ글에 순수 ν•¨μˆ˜λΌκ³  κ²€μƒ‰ν•˜λ©΄ λ§Žμ€ 개발자 뢄듀이 순수 ν•¨μˆ˜μ˜ νŠΉμ§•μ— λŒ€ν•œ ν¬μŠ€νŒ…μ„ μž‘μ„±ν•΄λ†“μ€ 것을 λ³Ό 수 μžˆλ‹€.

    일반적으둜 μš°λ¦¬κ°€ 순수 ν•¨μˆ˜μ— λŒ€ν•΄μ„œ κ³΅λΆ€ν•˜λ €κ³  ν•˜λ©΄ λ‹€μŒκ³Ό 같은 두 가지 νŠΉμ§•μ„ κ°€μ§€λŠ” ν•¨μˆ˜λΌκ³  μ •μ˜ν•˜λŠ” 경우λ₯Ό 많이 λ³Ό 수 μžˆλ‹€.

    1. λ™μΌν•œ 인풋(인자)μ—λŠ” 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ‚΄μ•Όν•œλ‹€.
    2. ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜, μ™ΈλΆ€μ˜ μƒνƒœμ— 영ν–₯을 λ°›μ•„μ„œλŠ” μ•ˆλœλ‹€.

    κ·ΈλŸ¬λ‚˜ μ΄λ ‡κ²Œ κ³΅λΆ€ν•˜κ²Œ 되면 β€œμˆœμˆ˜ ν•¨μˆ˜λŠ” μ΄λŸ°μ €λŸ° νŠΉμ§•μ„ 가지고 μžˆλŠ” ν•¨μˆ˜β€λΌκ³  μ™Έμš°κ²Œ 되기 μ‰¬μš΄λ°, 사싀 순수 ν•¨μˆ˜λŠ” μ΄λ ‡κ²Œ μ ‘κ·Όν•  ν•„μš”κ°€ μ—†λŠ”, 더 μ‹¬ν”Œν•œ κ°œλ…μ΄λ‹€.

    뭐 κ·Έλƒ₯ μ΄λ ‡κ²Œλ§Œ μ™Έμ›Œλ†”λ„ 순수 ν•¨μˆ˜κ°€ μ–΄λ–€ 것인지 μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•˜λŠ” λ°λŠ” μ „ν˜€ 무리가 μ—†μ§€λ§Œ, ν•„μžλŠ” 순수 ν•¨μˆ˜μ˜ μ΄λŸ¬ν•œ νŠΉμ§•μ΄ μ–΄λ””μ„œ λ‚˜μ˜¨ 것인지, 순수 ν•¨μˆ˜λΌλŠ” 것이 μ •ν™•ν•˜κ²Œ 무엇을 μ˜λ―Έν•˜λŠ”μ§€μ— λŒ€ν•΄ 쑰금 더 근본적인 이야기λ₯Ό 해보렀고 ν•œλ‹€.

    순수 ν•¨μˆ˜λŠ” κ·Έλƒ₯ μˆ˜ν•™μ  ν•¨μˆ˜λ‹€

    μš°λ¦¬κ°€ 순수 ν•¨μˆ˜λΌκ³  이름을 λΆ™νžˆκ³  순수 ν•¨μˆ˜μ˜ νŠΉμ§•μ€ μ΄λŸ¬μ΄λŸ¬ν•œ 것듀이 μžˆλ‹€κ³  κ³΅λΆ€ν•˜κΈ° λ•Œλ¬Έμ— λ­”κ°€ νŠΉλ³„ν•œ ν•¨μˆ˜μΈ 것 κ°™μ§€λ§Œ, 사싀 순수 ν•¨μˆ˜λŠ” κ·Έλƒ₯ μˆ˜ν•™μ—μ„œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν”„λ‘œκ·Έλž˜λ°μ˜ 세계에 λ˜‘κ°™μ΄ κ΅¬ν˜„ν•΄λ†“μ€ 것에 λΆˆκ³Όν•˜λ‹€.

    μœ„ν‚€ 백과의 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ •μ˜λ₯Ό 보면 이 κ°œλ…μ— λŒ€ν•΄ 쑰금 더 μžμ„Έν•˜κ²Œ μž‘μ„±λœ μ„€λͺ…을 λ³Ό 수 μžˆλ‹€.

    ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(functional programming)은 자료 처리λ₯Ό μˆ˜ν•™μ  ν•¨μˆ˜μ˜ κ³„μ‚°μœΌλ‘œ μ·¨κΈ‰ν•˜κ³  μƒνƒœμ™€ κ°€λ³€ 데이터λ₯Ό λ©€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ˜ ν•˜λ‚˜μ΄λ‹€. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μƒνƒœλ₯Ό λ°”κΎΈλŠ” 것을 κ°•μ‘°ν•˜λŠ” κ²ƒκ³ΌλŠ” 달리, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜μ˜ μ‘μš©μ„ κ°•μ‘°ν•œλ‹€.

    ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° - μœ„ν‚€ λ°±κ³Ό 원문 링크

    이 μ„€λͺ…μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ ν‚€μ›Œλ“œλŠ” λ°”λ‘œ μˆ˜ν•™μ  ν•¨μˆ˜λΌλŠ” 단어이닀. μš°λ¦¬κ°€ μ΄λŸ°μ €λŸ° νŠΉμ§•μ„ μ™Έμš°λ©° κ³΅λΆ€ν•˜λŠ” 순수 ν•¨μˆ˜λΌλŠ” 녀석은 말 κ·ΈλŒ€λ‘œ μˆœμˆ˜ν•œ ν•¨μˆ˜, 즉 μˆ˜ν•™μ—μ„œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•˜λŠ” 것이닀.

    μš°λ¦¬κ°€ μˆ˜ν•™μ˜ 세계와 ν”„λ‘œκ·Έλž˜λ°μ˜ μ„Έκ³„μ—μ„œ λ™μΌν•˜κ²Œ ν•¨μˆ˜λΌλŠ” κ°œλ…μ„ μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ— κ°„ν˜Ή μžŠμ–΄λ²„λ¦¬κΈ΄ ν•˜μ§€λ§Œ, 사싀 ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜λŠ” μˆ˜ν•™μ˜ κ·Έκ²ƒκ³ΌλŠ” λ‹€λ₯Έ 점이 μƒλ‹Ήνžˆ λ§Žλ‹€.

    그럼 μˆ˜ν•™μ μΈ ν•¨μˆ˜μ™€ ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜ κ°„ 차이점을 μ•Œμ•„λ³΄κΈ° μœ„ν•΄, μˆ˜ν•™μ μΈ ν•¨μˆ˜μ˜ μ •μ˜λΆ€ν„° λ‹€μ‹œ ν•œλ²ˆ ν™•μ‹€ν•˜κ²Œ 짚고 λ„˜μ–΄κ°€λ„λ‘ ν•˜μž.

    μˆ˜ν•™μ—μ„œμ˜ ν•¨μˆ˜

    μš°λ¦¬κ°€ 쀑학생 λ•Œ λ°°μ› λ˜ ν•¨μˆ˜λΌλŠ” 녀석은 λŒ€λž΅ λ‹€μŒκ³Ό 같은 μ •μ˜λ₯Ό κ°€μ§€λŠ” κ°œλ…μ΄λ‹€.

    μž„μ˜μ˜ x∈Xx \in X에 λŒ€ν•˜μ—¬ 그에 λŒ€μ‘ν•˜λŠ” y∈Yy \in Yκ°€ μœ μΌν•˜κ²Œ μ‘΄μž¬ν•˜λŠ” λŒ€μ‘ 관계

    μˆ˜ν•™μ΄λΌλŠ” ν•™λ¬Έ 특유의 μ–΄λ €μ›Œ λ³΄μ΄λŠ” 문법을 μ‚¬μš©ν•˜κΈ΄ ν–ˆμ§€λ§Œ λœ―μ–΄λ³΄λ©΄ 별 κ±° μ—†λ‹€. 이 μ •μ˜μ—μ„œ λ“±μž₯ν•˜λŠ” XXλŠ” μ •μ˜μ—­, YYλŠ” μΉ˜μ—­μ΄λΌκ³  ν•˜λ©°, 각각 μ •μ˜μ—­μ€ ν•¨μˆ˜μ˜ input, μΉ˜μ—­μ€ ν•¨μˆ˜μ˜ output에 μ‚¬μš©λ  수 μžˆλŠ” κ°’μ˜ 집합이라고 μƒκ°ν•˜λ©΄ λœλ‹€.

    즉, μ •μ˜μ—­μ€ ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©λ˜λŠ” κ°’λ“€, μΉ˜μ—­μ€ ν•¨μˆ˜μ˜ 결과물둜 μ‚¬μš©λ˜λŠ” κ°’λ“€μ΄λΌλŠ” 뜻이라고 봐도 λ¬΄λ°©ν•˜λ‹€.

    ν•˜μ§€λ§Œ 이 μ •μ˜μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것은 μ •μ˜μ—­μ΄λ‹ˆ μΉ˜μ—­μ΄λ‹ˆ ν•˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆλΌ, ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©λ˜λŠ” κ°’ ν•˜λ‚˜μ— λŒ€μ‘ν•˜λŠ” ν•¨μˆ˜μ˜ κ²°κ³Ό 값이 μœ μΌν•˜κ²Œ μ‘΄μž¬ν•œλ‹€λΌλŠ” κ°œλ…μ΄λ‹€.

    μ–΄λ–€ 값을 ν•¨μˆ˜μ— λ˜μ§€λ©΄ λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ 값을 λ°˜ν™˜ν•˜λŠ” 것, 이것이 본래 ν•¨μˆ˜μ˜ μ •μ˜λ‹€.

    functions
    오른쪽 그림처럼 정의역의 원소에 대응하는 치역의 원소가 없거나 2개 이상인 경우는
    함수의 정의에서 벗어나게 된다


    쑰금 더 νŽΈν•œ 이해λ₯Ό μœ„ν•΄ 인자둜 받은 값에 2λ₯Ό κ³±ν•˜λŠ” κ°„λ‹¨ν•œ ν•¨μˆ˜λ₯Ό μƒκ°ν•΄λ³΄μž. μš°λ¦¬λŠ” 이런 ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ f(x)=2xf(x) = 2x와 같은 μ‹μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€.

    이제 이 ν•¨μˆ˜μ˜ 인자인 xxλ₯Ό 1이라고 생각해보면 μš°λ¦¬λŠ” f(1)=2Γ—1=2f(1) = 2 \times 1 = 2λΌλŠ” κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€. λ§Œμ•½ μ–΄λŠ λ‚  κ°‘μžκΈ° f(1)=3f(1) = 3이 λ˜μ–΄λ²„λ¦°λ‹€λ©΄, 이 ν•¨μˆ˜λŠ” νŠΉμ •ν•œ μ •μ˜μ—­μ˜ μ›μ†Œμ— λ§žλŒ€μ‘λ˜λŠ” μΉ˜μ—­μ˜ μ›μ†Œκ°€ μœ μΌν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 더 이상 ν•¨μˆ˜λΌκ³  λΆ€λ₯Ό 수 μ—†λŠ” 것이닀.

    일반적으둜 μ΄μ•ΌκΈ°ν•˜λŠ” 순수 ν•¨μˆ˜μ˜ νŠΉμ§•λ“€μ€ λ°”λ‘œ μ΄λŸ¬ν•œ μˆ˜ν•™μ  ν•¨μˆ˜μ˜ μ„±μ§ˆμ—μ„œ κΈ°μ›ν•œλ‹€.

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

    κ·ΈλŸ¬λ‚˜ ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜μ—λŠ” μ΄λŸ¬ν•œ μ œμ•½μ΄ μ „ν˜€ μ—†λ‹€. 이런 μ €λŸ° μ˜ˆμ‹œλ₯Ό λ“€ 것도 없이, μ–΄λ–€ 값도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” voidν˜• ν•¨μˆ˜κ°€ μžˆμ§€ μ•Šμ€κ°€?

    function foo (x): void {
      const y = x * 2;
    }
    
    console.log(foo(1));
    undefined

    μˆ˜ν•™μ μΈ ν•¨μˆ˜μ˜ μ •μ˜λ‘œ λΉ„μΆ°λ³Ό λ•Œ μ΄λŸ¬ν•œ voidν˜• ν•¨μˆ˜λŠ” ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€. μ •μ˜μ—­μ˜ μ›μ†ŒμΈ x와 λ§žλŒ€μ‘ν•˜λŠ” μΉ˜μ—­μ˜ μ›μ†Œκ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έλž˜μ„œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜λΌλŠ” κ°œλ…μ΄ μˆ˜ν•™μ˜ ν•¨μˆ˜μ™€ μ•½κ°„ λ‹€λ₯΄λ‹€κ³  μ΄μ•ΌκΈ°ν•˜λŠ” 것이닀.

    사싀 ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜λŠ” μˆ˜ν•™μ˜ ν•¨μˆ˜μ—μ„œ β€œμ–΄λ–€ 값을 던져주면 λ­”κ°€λ₯Ό κ³„μ‚°ν•œλ‹€β€λΌλŠ” κ°œλ…λ§Œ λ“€κ³  온 것에 λΆˆκ³Όν•˜λ©°, μˆ˜ν•™μ μΈ κ΄€μ μ—μ„œ 바라보면 ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜λŠ” 사싀 ν•¨μˆ˜κ°€ μ•„λ‹Œ κ²½μš°κ°€ 더 λ§Žλ‹€.

    무엇보닀 μˆ˜ν•™μ˜ ν•¨μˆ˜μ™€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜κ°€ κ°€μž₯ 큰 차이λ₯Ό λ³΄μ΄λŠ” 점은 λ°”λ‘œ ν•¨μˆ˜μ˜ λ™μž‘μ΄ μΌκ΄€λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€λŠ” 것이닀.

    μ•„κΉŒ μ˜ˆμ‹œλ‘œ λ“€μ—ˆλ˜ f(x)=2xf(x) = 2xλΌλŠ” μˆ˜ν•™μ˜ ν•¨μˆ˜λŠ” λ‚΄λΆ€ κ΅¬ν˜„μ΄ μ–΄λ–»κ²Œ λ˜μ–΄μžˆλ˜ 항상 xx둜 1을 λ°›μœΌλ©΄ 2λ₯Ό λ±‰μ–΄λ‚΄λŠ” 것이 보μž₯λ˜μ–΄ μžˆμ§€λ§Œ, ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 그렇지 μ•Šμ€ ν•¨μˆ˜λ„ μ–Όλ§ˆλ“ μ§€ λ§Œλ“€μ–΄ λ‚Ό 수 μžˆλ‹€.

    예λ₯Ό λ“€λ©΄ Math.randomμ΄λΌλ˜κ°€, Date.prototype.getTimeκ³Ό 같은 λ©”μ†Œλ“œλ“€μ„ μ‚¬μš©ν•œ ν•¨μˆ˜ 같은 것듀 말이닀. 이 λ©”μ†Œλ“œλ“€μ€ ν•¨μˆ˜μ˜ λ™μž‘κ³Ό μ „ν˜€ μƒκ΄€μ—†λŠ” 값을 λ§Œλ“€μ–΄λ‚΄κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜μ˜ 연산이 μ΄λŸ¬ν•œ 값듀에 μ’…μ†λ˜μ–΄ 버린닀면 κ°œλ°œμžλŠ” 이 ν•¨μˆ˜κ°€ μ–΄λ–€ 값을 뱉어낼 지 μ ˆλŒ€ μ˜ˆμΈ‘ν•  μˆ˜κ°€ μ—†λ‹€.

    function sum (x: number): number {
      return x + Math.random();
    }
    
    sum(1);
    sum(1);
    sum(1);
    5 // ?
    4 // ?
    9 // ?

    이런 κ°œλ…μ€ νŠΉμ •ν•œ 의미λ₯Ό κ°€μ§€λŠ” 값듀을 μ €μž₯, ν• λ‹Ή, ν˜ΈμΆœν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ°μ˜ μ„Έκ³„μ—μ„œλ§Œ μ‘΄μž¬ν•˜λŠ” 것듀이며, μˆ˜ν•™μ˜ μ„Έκ³„μ—μ„œλŠ” 이런 κ°œλ… μžμ²΄κ°€ μ—†λ‹€.

    μ΄λ ‡κ²Œ νŠΉμ •ν•œ 의미λ₯Ό κ°€μ§€λŠ” 값듀을 μš°λ¦¬λŠ” μƒνƒœ(State)라고 λΆ€λ₯Έλ‹€. μƒνƒœλŠ” ν”„λ‘œκ·Έλž¨μ˜ ν˜„μž¬ 상황을 λ³΄μ—¬μ£ΌλŠ” 쒋은 역할도 ν•˜μ§€λ§Œ, μ—¬κΈ°μ €κΈ°μ„œ λ¬΄λΆ„λ³„ν•˜κ²Œ 이 μƒνƒœλ₯Ό μ°Έμ‘°ν•˜κ±°λ‚˜ λ³€κ²½ν•˜λŠ” 경우, 개발자쑰차 ν˜„μž¬ ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ λŒμ•„κ°€λŠ”μ§€ νŒŒμ•…ν•˜κΈ° νž˜λ“  μŠ¬ν”ˆ 상황이 λ°œμƒν•  μˆ˜λ„ μžˆλ‹€.

    κ·Έλž˜μ„œ κ°œλ°œμžλ“€μ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” ν–‰μœ„μ— νŠΉμ •ν•œ κ·œμΉ™κ³Ό μ œμ•½μ„ μ •ν•΄μ„œ λ¬΄λΆ„λ³„ν•œ μƒνƒœ λ³€ν™”λ₯Ό μ΅œλŒ€ν•œ ν”Όν•˜κ³ , 이런 λ³€ν™”λ₯Ό 좔적할 수 μžˆλŠ” 상황을 μ„ ν˜Έν•œλ‹€.

    λ¬Έμ œλŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜λŠ” 이런 μƒνƒœλ“€, 더 μ •ν™•νžˆ μ΄μ•ΌκΈ°ν•˜μžλ©΄ ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ“€κ³Ό λ­”κ°€ 썸씽이 μƒκΈ°λŠ” κ²½μš°κ°€ λ§Žλ‹€λŠ” 것이닀. μ—¬κΈ° 인자둜 받은 수λ₯Ό ν•¨μˆ˜ 외뢀에 μ„ μ–Έλœ λ³€μˆ˜μ™€ λ”ν•œ ν›„ λ°˜ν™˜ν•˜λŠ” addStateλΌλŠ” κ°„λ‹¨ν•œ ν•¨μˆ˜κ°€ μžˆλ‹€.

    let state = 3;
    function addState (x: number): number {
      return state + x;
    }
    
    addState(1);
    4

    addState ν•¨μˆ˜λŠ” μžμ‹  외뢀에 μžˆλŠ” stateλΌλŠ” 값을 μ°Έμ‘°ν•˜μ—¬ μžμ‹ μ΄ 인자둜 받은 수λ₯Ό λ”ν•΄μ£ΌλŠ” κ°„λ‹¨ν•œ 일을 ν•œλ‹€.

    즉, 이 ν•¨μˆ˜μ˜ κ²°κ³Ό 값은 ν•¨μˆ˜μ˜ μ™ΈλΆ€ μƒνƒœμΈ state λ³€μˆ˜μ— μ’…μ†λ˜μ–΄ μžˆλ‹€λŠ” 것이며, 이런 상황은 κ°œλ°œμžκ°€ ν•¨μˆ˜μ˜ λ™μž‘μ„ μ˜ˆμΈ‘ν•  수 μ—†κ²Œ λ§Œλ“œλŠ” μœ„ν—˜ μš”μ†Œλ‘œ μž‘μš©ν•  수 μžˆλ‹€.

    λ§Œμ•½ λ‹€λ₯Έ κ³³μ—μ„œ state λ³€μˆ˜μ˜ 값을 변경이라도 ν•˜λ©΄ 상황은 λ”μš± 꼬이기 μ‹œμž‘ν•  것이닀.

    state = 10;
    addState(1);
    11

    이전과 같은 ν•¨μˆ˜μ— 같은 인자λ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, 결과값은 μ „ν˜€ λ‹€λ₯΄κ²Œ λ‚˜μ™”λ‹€. 이 ν•¨μˆ˜λŠ” μ™ΈλΆ€ μƒνƒœμ˜ 변화에 따라 μžμ‹ μ˜ κ²°κ³Ό 값도 λ³€κ²½λ˜κΈ° λ•Œλ¬Έμ—, κ°œλ°œμžλŠ” 이 ν•¨μˆ˜μ˜ λ™μž‘μ„ μ „ν˜€ μ˜ˆμΈ‘ν•  수 μ—†λŠ” 것이닀.

    μ΄λ ‡κ²Œ ν•¨μˆ˜κ°€ ν•¨μˆ˜ μ™ΈλΆ€ μƒνƒœμ— 영ν–₯을 λ°›κ±°λ‚˜, ν•¨μˆ˜ μ™ΈλΆ€ μƒνƒœλ₯Ό 직접 λ³€κ²½ν•˜λŠ” ν–‰μœ„λ₯Ό μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ(Side Effect)라고 ν•˜λ©°, μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό λ°œμƒμ‹œν‚€λŠ” ν•¨μˆ˜λŠ” κ°œλ°œμžκ°€ μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•œ 버그λ₯Ό λ°œμƒμ‹œν‚€λŠ” μœ„ν—˜ μš”μ†Œ 쀑 ν•˜λ‚˜μ΄λ‹€.

    그런 이유둜 μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 같은 μ–Έμ–΄μ—μ„œλŠ” μ „μ—­ λ³€μˆ˜μ˜ μ„ μ–Έ 및 할당을 μ΅œλŒ€ν•œ μ§€μ–‘ν•˜λŠ” μ»¨λ²€μ…˜μ„ 내놓기도 ν•˜λ©°, React Hooksμ—μ„œλŠ” μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό λ°œμƒμ‹œν‚€λŠ” λ™μž‘μ„ λ”°λ‘œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ useEffectλΌλŠ” 훅을 μ œκ³΅ν•˜κΈ°λ„ ν•œλ‹€.

    function TestComponent () {
      useEffect(() => {
        localStorage.setItem('greeting', 'Hi');
        return () => {
          localStorage.removeItme('greeting');
        };
      });
    
      return <div>TestComponent</div>;
    }

    μ§€κΈˆ 이게 κ°„λ‹¨ν•œ ν•¨μˆ˜μΈλ°λ‹€κ°€ μ˜λ„μ μœΌλ‘œ μ—°μΆœν•œ 상황이라 λΆ€μžμ—°μŠ€λŸ¬μ›Œ 보일 μˆ˜λ„ μžˆμ§€λ§Œ, μ‹€μ œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” 이거보닀 훨씬 λ³΅μž‘ν•˜κ³  μ΄μƒν•œ 짓듀을 ν•˜λŠ” ν•¨μˆ˜κ°€ μˆ˜λ‘λ£©ν•˜λ‹€.

    예λ₯Ό λ“€λ©΄ API μ„œλ²„μ™€ ν†΅μ‹ ν•œ 결과물을 λ±‰μ–΄λ‚΄λŠ” κ°„λ‹¨ν•œ ν•¨μˆ˜ λ˜ν•œ μˆœμˆ˜ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜μ˜ 일쒅이닀.

    async function getUsers () {
      try {
        const response = await fetch('/api/users');
        return response.json();
      }
      catch (e) {
        throw e;
      }
    }

    λ”± 봐도 getUsersλŠ” ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ 항상 같은 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λŠ” μ•„λ‹ˆλ‹€. ν˜„μž¬ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœμ— 따라 μœ μ € λ¦¬μŠ€νŠΈλŠ” 맀번 λ‹¬λΌμ§ˆ 수 있기 λ•Œλ¬Έμ΄λ‹€.

    μ΄λ ‡κ²Œ μˆœμˆ˜ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜λŠ” κ°œλ°œμžκ°€ ν•¨μˆ˜μ˜ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜μ˜ λ™μž‘μ„ κ²€μ‚¬ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것 λ˜ν•œ λΆˆκ°€λŠ₯ν•˜λ‹€. μ• μ΄ˆμ— μ•„μ›ƒν’‹μœΌλ‘œ 뭘 내보낼 지도 감이 μ•ˆμ˜€λŠ” λ³€λ•μŠ€λŸ¬μš΄ 녀석을 μ–΄λ–€ κΈ°μ€€μœΌλ‘œ κ²€μ‚¬ν•œλ‹¨ 말인가?

    이렇듯 ν”„λ‘œκ·Έλž˜λ°μ˜ μ„Έκ³„μ—μ„œ μ΄μ•ΌκΈ°ν•˜λŠ” ν•¨μˆ˜λŠ” μˆ˜ν•™μ˜ ν•¨μˆ˜λ³΄λ‹€ 더 λ³€μˆ˜κ°€ 많고, κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜κΈ°κ°€ νž˜λ“  κ°œλ…μ΄λ‹€.

    μˆœμˆ˜ν•œ μˆ˜ν•™μ  ν•¨μˆ˜λ‘œ νšŒκ·€ν•˜μž

    자, 이제 μˆ˜ν•™μ˜ μ„Έκ³„μ—μ„œ λ§ν•˜λŠ” ν•¨μˆ˜μ™€ ν”„λ‘œκ·Έλž˜λ°μ˜ μ„Έκ³„μ—μ„œ λ§ν•˜λŠ” ν•¨μˆ˜μ˜ 차이λ₯Ό μ‚΄νŽ΄λ³΄μ•˜μœΌλ‹ˆ, λ‹€μ‹œ 순수 ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό κ°€μ Έμ™€λ³΄μž.

    1. λ™μΌν•œ 인풋(인자)μ—λŠ” 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ‚΄μ•Όν•œλ‹€.
    2. ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜, μ™ΈλΆ€μ˜ μƒνƒœμ— 영ν–₯을 λ°›μ•„μ„œλŠ” μ•ˆλœλ‹€.

    μ•žμ„œ 이야기 ν–ˆλ“―μ΄, μˆ˜ν•™μ˜ μ„Έκ³„μ—μ„œ ν•¨μˆ˜λŠ” λ‹¨μˆœνžˆ 인풋을 λ°›μœΌλ©΄ λ­”κ°€ 계산을 ν•΄μ„œ 단 ν•˜λ‚˜μ˜ κ²°κ³Όλ₯Ό λ‚΄λŠ” κ°œλ…μ΄λ‹€.

    그리고 μˆ˜ν•™μ˜ μ„Έκ³„μ—λŠ” λ­”κ°€ 값을 μ €μž₯해놓고 할당도 ν•˜κ³  ν˜ΈμΆœν•  μˆ˜λ„ μžˆλŠ” μƒνƒœλΌλŠ” κ°œλ…μ΄ μ—†μœΌλ‹ˆ, ν•¨μˆ˜κ°€ ν•¨μˆ˜ μ™ΈλΆ€ μƒνƒœμ— 영ν–₯을 μ£Όκ³  λ°›λŠ” μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλΌλŠ” 것도 λ‹Ήμ—°νžˆ μ‘΄μž¬ν•  μˆ˜κ°€ μ—†λ‹€.

    즉, μˆ˜ν•™μ—μ„œμ˜ ν•¨μˆ˜λ₯Ό ν”„λ‘œκ·Έλž˜λ°μ— κ·ΈλŒ€λ‘œ μ μš©ν•˜λ©΄ μˆœμˆ˜ν•œ ν•¨μˆ˜μ˜ νŠΉμ„±μΈ β€œν•¨μˆ˜μ˜ κ²°κ³ΌλŠ” ν•¨μˆ˜μ˜ μΈμžμ—λ§Œ 영ν–₯을 λ°›λŠ”λ‹€β€λΌλŠ” 쑰건과 β€œν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ 영ν–₯을 λ°›μ•„μ„  μ•ˆλœλ‹€β€λΌλŠ” 쑰건이 μžμ—°μŠ€λŸ½κ²Œ μΆ©μ‘±λ˜λŠ” 것이닀.

    그리고 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ΄μ•ΌκΈ°ν•˜λŠ” λΆˆλ³€μ„±(immutable) λ˜ν•œ μˆ˜ν•™κ³Ό λ§žλ‹Ώμ•„ μžˆλŠ” 지점인데, μ• μ΄ˆμ— μƒνƒœλΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μˆ˜ν•™μ˜ ν•¨μˆ˜λ₯Ό ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ κ΅¬ν˜„ν•œ 순수 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμœΌλ‹ˆ, μƒνƒœλ₯Ό λ³€κ²½ν•œλ‹€λŠ” κ°œλ… λ˜ν•œ μ—†μ–΄μ•Ό ν•˜λŠ” 것이닀.

    ν•˜μ§€λ§Œ ν”„λ‘œκ·Έλž˜λ°μ˜ μ„Έκ³„μ—λŠ” μ—„μ—°νžˆ μƒνƒœλΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ—, β€œν•¨μˆ˜μ˜ 인자λ₯Ό 직접 μˆ˜μ •ν•΄μ„œλŠ” μ•ˆλœλ‹€β€μ™€ 같은 μ œμ•½λ“€μ„ 슀슀둜 μ •μ˜ν•˜κ³  μ§€μΌœλ‚˜κ°ˆ 수 μžˆλ„λ‘ μ €λŸ° κ°œλ…μ„ λͺ…μ‹œμ μœΌλ‘œ μ΄μ•ΌκΈ°ν•˜λŠ” 것이닀.

    λ˜ν•œ 순수 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ λ”°λΌμ˜€λŠ” μž₯점듀인 β€œν…ŒμŠ€νŠΈκ°€ μ‰¬μ›Œμ§„λ‹€β€, β€œμ°Έμ‘° 투λͺ…성이 보μž₯λœλ‹€β€μ™€ 같은 이야기듀도 μˆ˜ν•™μ μΈ κ°œλ…μ—μ„œμ˜ ν•¨μˆ˜λ₯Ό μƒκ°ν•˜λ©΄ 사싀 λ‹Ήμ—°ν•˜κΈ° 그지 μ—†λŠ” 이야기듀이닀.

    μ•žμ„œ 잠깐 이야기 ν–ˆμ§€λ§Œ, 맀번 λ‹€λ₯Έ 값이 λ‚˜μ˜€λŠ” ν•¨μˆ˜μ— λŒ€ν•œ μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μ§ λ‹€κ³  생각해보면 μ§„μ§œ 닡이 μ—†λ‹€. μ• μ΄ˆμ— κ°œλ°œμžκ°€ ν•¨μˆ˜μ˜ λ™μž‘μ„ μ˜ˆμΈ‘ν•  수 μ—†μœΌλ‹ˆ ν•¨μˆ˜μ˜ λ™μž‘μ— λŒ€ν•œ λͺ¨λ²• λ‹΅μ•ˆμ„ μ œμ‹œν•  μˆ˜λ„ 없을 것이고, λ‹Ήμ—°νžˆ ν…ŒμŠ€νŠΈ μž‘μ„±λ„ λΆˆκ°€λŠ₯ ν•˜λ‹€.

    λ˜ν•œ 순수 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ°Έμ‘° 투λͺ…성이 보μž₯λœλ‹€λŠ” 말도 κ²°κ΅­ μš°λ¦¬κ°€ μˆ˜ν•™μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” = 기호의 의미λ₯Ό 생각해보면 κ·Έλ ‡κ²Œ νŠΉλ³„ν•œ 말이 μ•„λ‹ˆλ‹€.

    f(x)=2xf(1)=2∴f(1)+1=3\begin{aligned} f(x) = 2x\\ \\ f(1) = 2\\ \\ \therefore f(1) + 1 = 3 \end{aligned}
    μ°Έμ‘° 투λͺ…μ„±μ΄λΌλŠ” 것은 $f(1)$(ν•¨μˆ˜μ˜ μ‹€ν–‰λΆ€)λ₯Ό $2$(ν•¨μˆ˜μ˜ κ²°κ³Όλ¬Ό)둜 μΉ˜ν™˜ν•΄λ„
    계산 κ²°κ³Όκ°€ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•˜λŠ”λ°, μ• μ΄ˆμ— μš°λ¦¬λŠ” μ˜ˆμ „λΆ€ν„° μˆ˜ν•™μ—μ„œ κ·Έ κ°œλ…μ„ μ‚¬μš©ν•˜κ³  μžˆμ—ˆλ‹€


    이렇듯 순수 ν•¨μˆ˜λŠ” μ–΄λ–€ 인자λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ μ–΄λ–€ κ²°κ³Ό 값이 λ‚˜μ˜¬ 지 λ™μž‘μ„ μ˜ˆμΈ‘ν•  수 있고, μƒνƒœλΌλŠ” 것을 μ•„μ˜ˆ 없애버린 κ°œλ…μ΄κΈ° λ•Œλ¬Έμ—, κ°œλ°œμžκ°€ 예츑 κ°€λŠ₯ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ€€λ‹€.

    λ˜ν•œ ν•¨μˆ˜ μžμ²΄κ°€ ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœμ™€ 관계 없이 μˆœμˆ˜ν•˜κ²Œ λ‹¨μΌν•œ μ—°μ‚°μ—λ§Œ μ§‘μ€‘ν•˜κ³  μžˆμœΌλ‹ˆ, ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„ μ–Έν•œ 순수 ν•¨μˆ˜λŠ” λ‹€λ₯Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—λ‹€κ°€ κ°€μ Έλ‹€ λΆ™ν˜€λ„ λ°˜λ“œμ‹œ λ™μΌν•œ λ™μž‘μ„ ν•œλ‹€λŠ” 것이 보μž₯λœλ‹€. 즉, 쒋은 λͺ¨λ“ˆν™”μ˜ 쑰건 쀑 ν•˜λ‚˜μΈ 높은 응집도에도 λΆ€ν•©ν•œλ‹€.

    μ΄λ ‡κ²Œ 순수 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±λœ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ°œλ°œμžκ°€ ꡬ쑰와 λ™μž‘μ„ μ‰½κ²Œ 이해할 수 있기 λ•Œλ¬Έμ—, ꡳ이 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄ μ•„λ‹ˆλ”λΌλ„ μ „λ°˜μ μΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계에 κ½€λ‚˜ 도움이 λ˜λŠ” κ°œλ…μ΄λΌκ³  ν•  수 μžˆλ‹€.

    마치며

    ν•„μžλŠ” 처음 순수 ν•¨μˆ˜λΌλŠ” κ°œλ…μ„ μ ‘ν–ˆμ„ λ•Œ ꡬ글링과 λ‹€λ₯Έ 뢄듀이 μž‘μ„±ν•΄μ£Όμ‹  ν¬μŠ€νŒ…λ“€μ„ 톡해 순수 ν•¨μˆ˜μ˜ νŠΉμ§•, μž₯점, 단점 등을 λ¨Όμ € μ ‘ν•˜κ²Œ λ˜μ—ˆλŠ”λ°, λ‹Ήμ‹œμ—λŠ” β€œλ˜ μƒˆλ‘­κ²Œ κ³΅λΆ€ν• κ²Œ λ‚˜μ™”κ΅¬λ§Œβ€μ΄λΌλŠ” μƒκ°μ΄μ—ˆλ‹€.

    또 새로운 공부거리가 생겨버렸네...

    사싀 순수 ν•¨μˆ˜μ™€ 같은 νŒ¨λŸ¬λ‹€μž„μ„ 처음 μ ‘ν•˜κ²Œ 되면 μŠ΅κ΄€μ²˜λŸΌ ꡬ글링을 톡해 정보λ₯Ό μŠ΅λ“ν•˜κ³  곡뢀λ₯Ό ν•˜κ²Œ λ˜λŠ”λ°, μ΄λ•Œ 일반적으둜 λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 정리해놓은 ν¬μŠ€νŒ…μ„ 보고 κ³΅λΆ€ν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ λ§Žμ•˜λ‹€.

    κ·ΈλŸ¬λ‚˜ μ΄λ ‡κ²Œ 곡뢀λ₯Ό ν•˜λŠ” 경우, ν•΄λ‹Ή νŒ¨λŸ¬λ‹€μž„μ˜ 근본적인 λ°œμƒ μ΄μœ λ‚˜ 원리에 λŒ€ν•΄μ„œ 깊이 νŒŒμ•…ν•˜κΈ° λ³΄λ‹€λŠ” λͺ‡ 가지 νŠΉμ§•μ΄λ‚˜ μž₯단점을 λ¨Όμ € ν•™μŠ΅ν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ λ§Žμ•˜λ˜ 것 κ°™λ‹€.

    κ·Έλž˜μ„œ 순수 ν•¨μˆ˜λ„ β€œμƒˆλ‘­κ²Œ κ³΅λΆ€ν•΄μ•Όν•˜λŠ” κ²ƒβ€μ΄λΌλŠ” λŠλ‚ŒμœΌλ‘œ λ°›μ•„λ“€μ˜€μ—ˆμ§€λ§Œ, λ‚˜μ€‘μ— 곰곰히 μƒκ°ν•΄λ³΄λ‹ˆ κ·Έλƒ₯ 어릴 λ•Œ λ°°μ› λ˜ μˆ˜ν•™μ μΈ ν•¨μˆ˜μ˜ κ°œλ…μ„ κ·ΈλŒ€λ‘œ ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ κ΅¬ν˜„ν•œ κ²ƒμ΄λΌλŠ” κ°œλ…μ΄λΌλŠ” 것을 κΉ¨λ‹«κ³  κ½€λ‚˜ ν—ˆλ¬΄ν–ˆλ˜ 기얡이 μžˆλ‹€.

    κ·Έλž˜μ„œ ν•„μžλŠ” 이 ν¬μŠ€νŒ…μ—μ„œ β€œμˆœμˆ˜ ν•¨μˆ˜λŠ” μ΄λŸ°μ €λŸ° νŠΉμ§•μ„ 가진 ν•¨μˆ˜β€λΌκ³  μ„€λͺ…ν•˜μ§€ μ•Šμ•˜λ˜ 것이닀. 개인적인 μƒκ°μ΄κΈ°λŠ” ν•˜μ§€λ§Œ, λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ€ 어릴 λ•Œ 이미 ν•™κ΅μ—μ„œ ν•¨μˆ˜μ— λŒ€ν•œ μ •μ˜μ™€ κ°œλ…μ„ ν•™μŠ΅ν–ˆκΈ° λ•Œλ¬Έμ—, β€œμˆ˜ν•™μ μΈ ν•¨μˆ˜β€λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ ‘κ·Όν•˜λŠ” 것이 였히렀 이해가 λΉ λ₯Ό 것이라고 μƒκ°ν–ˆλ‹€.

    μ–΄μ¨Œλ“  ν•„μžλŠ” 이 ν¬μŠ€νŒ…μ„ 톡해 순수 ν•¨μˆ˜λŠ” μ „ν˜€ μƒˆλ‘œμš΄ κ°œλ…μ΄ μ•„λ‹ˆλΌλŠ” 이야기λ₯Ό ν•˜κ³  μ‹Άμ—ˆκ³ , λŒ€ν•œλ―Όκ΅­ 의무 κ΅μœ‘μ„ 받은 μ‚¬λžŒμ΄λΌλ©΄ λˆ„κ΅¬λ“ μ§€ λ‹€ μ΅μˆ™ν•˜κ²Œ 받아듀일 수 μžˆλŠ” κ°œλ…μ΄λΌλŠ” 것을 μ΄μ•ΌκΈ°ν•˜κ³  μ‹Άμ—ˆλ‹€.

    λ¬Όλ‘  순수 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ–€ μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ„€κ³„ν•˜λŠ” 것이 ν›Œλ₯­ν•œ 섀계인지와 같은 μ΄μ•ΌκΈ°λŠ” 의무 κ΅μœ‘κ³Όμ •μ— μ—†κΈ° λ•Œλ¬Έμ— λ³„λ„λ‘œ 곡뢀λ₯Ό ν•΄μ•Όκ² μ§€λ§Œ, 적어도 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ ν‚€μ›Œλ“œλ‘œ μ΄μ•ΌκΈ°ν•˜κ³  μžˆλŠ” 순수 ν•¨μˆ˜μ™€ λΆˆλ³€μ„±μ— λŒ€ν•œ 이해 μ •λ„λŠ” κ·Έλ ‡κ²Œ μ–΄λ €μš΄ 것은 아닐 것이라고 μƒκ°ν•œλ‹€.

    λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œλŠ” 순수 ν•¨μˆ˜μ™€ ν•¨κ»˜ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μΈ λΆˆλ³€μ„±μ— λŒ€ν•œ 이야기λ₯Ό 해보렀고 ν•œλ‹€.

    μ΄μƒμœΌλ‘œ μˆ˜ν•™μ—μ„œ κΈ°μ›ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„, 순수 ν•¨μˆ˜ ν¬μŠ€νŒ…μ„ λ§ˆμΉœλ‹€.

    Evan Moon

    🐒 거뢁이처럼 μ‚΄μž

    κ°œλ°œμ„ μž˜ν•˜κΈ° μœ„ν•΄μ„œκ°€ μ•„λ‹Œ κ°œλ°œμ„ 즐기기 μœ„ν•΄ λ…Έλ ₯ν•˜λŠ” κ°œλ°œμžμž…λ‹ˆλ‹€. μ‚¬μ†Œν•œ 생각 정리뢀터 νŠœν† λ¦¬μ–Ό, μ‚½μ§ˆκΈ° 정도λ₯Ό 주둜 끄적이고 μžˆμŠ΅λ‹ˆλ‹€.