λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» ν”„λ‘ νŠΈμ—”λ“œ/πŸ“š JS

[μžλ°”μŠ€ν¬λ¦½νŠΈ] ν΄λ‘œμ €

by megan07 2023. 12. 27.

ν΄λ‘œμ €λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•œ κ°œλ…

λ ‰μ‹œμ»¬ ν™˜κ²½
ν•΄λ‹Ή κ°œλ…μ„ λͺ¨λ₯΄μ‹ λ‹€λ©΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ ν¬μŠ€νŒ…μ„ λ¨Όμ € μ½λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€!

 

ν΄λ‘œμ €

μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 였래 μœ μ§€λ˜μ–΄
생λͺ… μ£ΌκΈ°κ°€ λλ‚œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ” 쀑첩 ν•¨μˆ˜

 

예제

function coffeeMachine() {
  let coffeeBeans = 10;

  const makeCoffee = () => {
    if (coffeeBeans < 4) {
      console.log('원두가 λΆ€μ‘±ν•©λ‹ˆλ‹€');
      return;
    }

    coffeeBeans -= 4;
    console.log('컀피 ν•œ μž”μ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.');
  };

  const checkCoffeeBeans = () => {
    console.log(`ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” ${coffeeBeans}g μž…λ‹ˆλ‹€.`);
  };

  const fillCoffeeBeans = (gram) => {
    coffeeBeans += gram;
    console.log(
      `원두 ${gram}g을 μ±„μ› μŠ΅λ‹ˆλ‹€. ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” ${coffeeBeans}g μž…λ‹ˆλ‹€.`,
    );
  };

  return {
    makeCoffee,
    checkCoffeeBeans,
    fillCoffeeBeans,
  };
}

const coffeeMachine1 = coffeeMachine();

coffeeMachine1.checkCoffeeBeans();
//ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” 10g μž…λ‹ˆλ‹€.
coffeeMachine1.makeCoffee();
//컀피 ν•œ μž”μ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
coffeeMachine1.checkCoffeeBeans();
// ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” 6g μž…λ‹ˆλ‹€.
coffeeMachine1.fillCoffeeBeans(10); 
//원두 10g을 μ±„μ› μŠ΅λ‹ˆλ‹€. ν˜„μž¬ 남아 μžˆλŠ” μ›λ‘λŠ” 16g μž…λ‹ˆλ‹€.

 

μ˜ˆμ œμ—μ„œ coffeeMachine의 생λͺ… μ£ΌκΈ°λŠ” λλ‚¬μ§€λ§Œ λ°˜ν™˜λœ λ©”μ„œλ“œλ“€μ„ ν†΅ν•΄μ„œ
coffeeMachine ν•¨μˆ˜ λ‚΄λΆ€μ˜ coffeeBeans λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯ν•œ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

이처럼 μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 였래 살아남아 μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν΄λ‘œμ €λΌκ³  λΆ€λ¦…λ‹ˆλ‹€.

 

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜μ‹œλŠ” 뢄듀은 μ΅μˆ™ν•˜μ‹€ν…λ° 사싀 μ €λ ‡κ²Œ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” 것은 ν›…κ³Ό λΉ„μŠ·ν•˜μ£ .
useState훅도 ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•œ 예 쀑에 ν•˜λ‚˜μž…λ‹ˆλ‹€.
또, μ»€μŠ€ν…€ 훅을 λ§Œλ“€ λ•Œ μžμ—°μŠ€λŸ½κ²Œ ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆλ˜κ²λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ ν΄λ‘œμ €λž‘ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄λž‘ 무슨 관련인가?

ν΄λ‘œμ €λŠ” ν•¨μˆ˜μ™€ κ·Έ ν•¨μˆ˜κ°€ μ„ μ–Έλœ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Όμ˜ μ‘°ν•©

 

λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ‹λ³„μžμ™€ μŠ€μ½”ν”„λ₯Ό κ΄€λ¦¬ν•˜λŠ” 자료ꡬ쑰둜 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

 

일반적으둜 ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλ˜λ©΄ ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 

ν•˜μ§€λ§Œ λˆ„κ΅°κ°€μ— μ˜ν•΄ μ°Έμ‘°λ˜μ–΄ μžˆλ‹€λ©΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μœ μ§€λ©λ‹ˆλ‹€.

-> λ°”λ‘œ ν΄λ‘œμ €λŠ” 이 원리λ₯Ό μ΄μš©ν•œ κ²ƒμž…λ‹ˆλ‹€.

 

1. λ°˜ν™˜λœ λ‚΄λΆ€ ν•¨μˆ˜κ°€ μ „μ—­ λ³€μˆ˜μ— μ˜ν•΄ μ°Έμ‘°λ˜μ–΄ μ™ΈλΆ€ν•¨μˆ˜λ³΄λ‹€ 였래 μƒμ‘΄ν•˜λŠ” μƒνƒœμ΄κ³ 
2. λ‚΄λΆ€ ν•¨μˆ˜κ°€ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€λ©΄ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μœ μ§€λœλ‹€.

 

λ ‰μ‹œμ»¬ ν™˜κ²½μ—λŠ” μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ—
μƒμœ„ μŠ€μ½”ν”„λ₯Ό μ°Έμ‘°ν•  수 있고, μƒμœ„ μŠ€μ½”ν”„μ˜ μ‹λ³„μžλ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν΄λ‘œμ €λŠ” μ™œ μ‚¬μš©ν• κΉŒ?

μΊ‘μŠν™”μ™€ 정보 은닉을 μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‚΄λΆ€ κ΅¬ν˜„ 사항을 숨기고 μ™ΈλΆ€μ—μ„œ μ§μ ‘μ μœΌλ‘œ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” coffeeMachineμ΄λΌλŠ” ν•¨μˆ˜ μ•ˆμ— coffeeBeans와 κ΄€λ ¨λœ ν•¨μˆ˜λ“€μ„ λ¬Άμ–΄μ„œ μΊ‘μŠν™” ν•˜κ³ 

coffeeBeans에 λŒ€ν•œ 접근을 막기 μœ„ν•΄ νŠΉμ • ν•¨μˆ˜μ—κ²Œλ§Œ μƒνƒœ 변경을 ν—ˆμš©ν–ˆμŠ΅λ‹ˆλ‹€.