πŸ” ν΄λ‘œμ €(Closure)λž€?

🧠 μ •μ˜

ν΄λ‘œμ €λž€

ν•¨μˆ˜μ™€ κ·Έ ν•¨μˆ˜κ°€ 선언될 λ‹Ήμ‹œμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Environment)을 κΈ°μ–΅ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

μ‰½κ²Œ 말해,

**"ν•¨μˆ˜κ°€ 선언될 λ‹Ήμ‹œμ˜ μ™ΈλΆ€ λ³€μˆ˜λ₯Ό 계속 κΈ°μ–΅ν•˜λ©΄μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜"**μž…λ‹ˆλ‹€.


πŸͺ„ μ‹€μƒν™œ λΉ„μœ 

πŸ“¦ λΉ„λ°€ 금고 μ˜ˆμ‹œ

μ™ΈλΆ€μ—μ„œλŠ” 금고 μ•ˆ λ‚΄μš©μ„ 직접 λ³Ό 수 μ—†μ§€λ§Œ,

νŠΉμ • ν‚€(ν•¨μˆ˜)λ₯Ό κ°€μ§„ μ‚¬λžŒλ§Œ 금고 μ•ˆ 물건을 κΊΌλ‚Ό 수 μžˆμ–΄μš”.

이처럼 ν΄λ‘œμ €λŠ” ν•¨μˆ˜ μ•ˆμ˜ λ³€μˆ˜λ“€μ„ μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ 숨기고,

νŠΉμ • ν•¨μˆ˜(λ‚΄λΆ€ ν•¨μˆ˜)λ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•  수 있게 ν•΄μ€λ‹ˆλ‹€.


🧩 μ™œ ν•„μš”ν• κΉŒ?

λͺ©μ  μ„€λͺ…
βœ… μƒνƒœ μœ μ§€ ν•¨μˆ˜κ°€ 마치 객체처럼 μžμ‹ μ˜ μƒνƒœλ₯Ό 기얡함
πŸ”’ 데이터 은닉 μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•  수 μ—†λŠ” λ³€μˆ˜λ₯Ό λ§Œλ“€κ³ , λ‚΄λΆ€ ν•¨μˆ˜λ‘œλ§Œ μ ‘κ·Ό κ°€λŠ₯
♻️ λͺ¨λ“ˆν™” / μž¬μ‚¬μš© 곡톡 λ™μž‘μ„ κΈ°μ–΅ν•œ ν•¨μˆ˜λ“€μ„ 반볡 μ‚¬μš© κ°€λŠ₯

πŸ”„ ν΄λ‘œμ € 예제

function outer() {
  let count = 0;

  return function inner() {
    count++;
    console.log("ν˜„μž¬ count:", count);
  };
}

const counter = outer();  // outerλŠ” μ‹€ν–‰λμ§€λ§Œ innerλŠ” λ°˜ν™˜λ¨

counter();  // ν˜„μž¬ count: 1
counter();  // ν˜„μž¬ count: 2
counter();  // ν˜„μž¬ count: 3

πŸ” countλŠ” outer ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ³€μˆ˜μ΄μ§€λ§Œ,

inner() ν•¨μˆ˜κ°€ 이λ₯Ό κΈ°μ–΅ν•˜κ³  계속 μ ‘κ·Όν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이처럼 μ™ΈλΆ€ ν•¨μˆ˜λŠ” 싀행이 끝났어도 λ‚΄λΆ€ ν•¨μˆ˜κ°€ μ°Έμ‘° 쀑이면 λ³€μˆ˜λŠ” 사라지지 μ•ŠμŠ΅λ‹ˆλ‹€.


🧠 ν΄λ‘œμ €κ°€ λ§Œλ“€μ–΄μ§€λŠ” 쑰건

ν΄λ‘œμ €λŠ” λ‹€μŒ 쑰건이 λͺ¨λ‘ 만쑱될 λ•Œ μƒμ„±λ©λ‹ˆλ‹€:

  1. ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜κ°€ μžˆμ–΄μ•Ό 함 (쀑첩 ν•¨μˆ˜ ꡬ쑰)