FE/BOOK

[ν•¨μˆ˜ν˜•μ½”λ”©]WEEK2 ν•¨μˆ˜ν˜• 사고: 더 쒋은 μ•‘μ…˜ λ§Œλ“€κΈ°

<zinny/> 2025. 3. 19. 16:45
728x90

 

πŸš€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ•‘μ…˜κ³Ό κ³„μ‚°μ΄λž€?

 

λ²„κ·Έμ˜ λŒ€λΆ€λΆ„μ€ μ˜ˆμΈ‘ν•  수 μ—†λŠ” λ™μž‘ μ—μ„œ λ°œμƒλœλ‹€.

νŠΉνžˆλ‚˜ μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν• λ•Œ μš°λ¦¬κ°€ μ˜λ„ν•˜μ§€ μ•Šμ€ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 μžˆλ‹€.

 

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž¨λ°μ€ μ•‘μ…˜μ€ μ΅œμ†Œν™”, 계산은 μ΅œλŒ€ν™” ν•˜λŠ” λ°©μ‹μœΌλ‘œ

μ½”λ“œλ₯Ό 더 예츑 κ°€λŠ₯ν•˜κ³ , μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ λ§Œλ“ λ‹€. 

 

ν•¨μˆ˜ν˜• μ½”λ”©μ±…μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°œλ…μ–΄λ“€μ€ μ΄λ ‡κ²Œ λ°”κΏ”μ„œ μƒκ°ν•˜λ©΄ 쉽닀.
μ•‘μ…˜ -> λΆ€μˆ˜νš¨κ³Ό , 계산 -> μˆœμˆ˜ν•¨μˆ˜, 데이터 -> λΆˆλ³€μ„±

 

πŸš€ 계산 μ΄λž€?

 

- λ™μΌν•œ μž…λ ₯ -> λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜

- μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€. 

- 암묡적 μž…λ ₯κ³Ό 좜λ ₯이 μ—†λŠ” ν•¨μˆ˜

 

πŸ“Œ 잘λͺ»λœ 예

let total = 0;
function addToTotal(value) {
  total += value; // μ™ΈλΆ€ μƒνƒœ(total)λ₯Ό λ³€κ²½ ❌
  return total;
}

console.log(addToTotal(5)); // 5
console.log(addToTotal(5)); // 10 (값이 달라짐!)

 

 

βœ… μˆ˜μ •λœ 예

function addToTotal(total, value) {
  return total + value; // μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ βœ…
}

// μ‚¬μš© 예제
let total = 0; // 초기 κ°’

total = addToTotal(total, 5);
console.log(total); // 5

total = addToTotal(total, 5);
console.log(total); // 10 (항상 예츑 κ°€λŠ₯!)

 


πŸš€ μ•‘μ…˜ μ΄λž€?

 

- λ™μΌν•œ μž…λ ₯ -> λ‹€λ₯Έ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 있음

- μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½

- 암묡적 μž…λ ₯ λ˜λŠ” 암묡적 좜λ ₯이 μžˆλŠ” ν•¨μˆ˜

 

βœ… μ•‘μ…˜μ˜ μ˜ˆμ‹œ

function logMessage(message) {
  console.log(message); // μ½˜μ†”μ— λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” μ•‘μ…˜ ❌
}

logMessage("Hello!"); // μ‹€μ œλ‘œ 싀행될 λ•Œλ§ˆλ‹€ μ™ΈλΆ€ μƒνƒœ(Console)κ°€ 변경됨

 

πŸš€ μ•‘μ…˜μ—μ„œ 계산 λΉΌλ‚΄κΈ°

 

- ν…ŒμŠ€νŠΈν•˜κΈ° 쉽고, μž¬μ‚¬μš©ν•˜κΈ° 쉽닀.

 

즉 계산을 늘리고 μ•‘μ…˜μ„ 쀄이면 μ½”λ“œκ°€ 예츑 κ°€λŠ₯ν•΄ 진닀. 

 

πŸ“Œ μ•‘μ…˜μ„ ν¬ν•¨ν•œ λ‚˜μœ μ½”λ“œ

const cart = [];

function addToCart(item) {
  cart.push(item) // 원본 λ°°μ—΄(cart) λ³€κ²½ ❌
}

addToCart("🍎");
console.log(cart); // ['🍎'] (cartκ°€ 변경됨!)

 

 

βœ… μ•‘μ…˜μ„ 쀄이고 계산을 λŠ˜λ¦°μ½”λ“œ

const cart = [];

function addToCart(cart, item){
  const newCart = cart.slice();
  newCart.push(item)
  return newCart
}

const newCart = addToCart(cart, "🍎");
console.log(cart); // [] (원본 μœ μ§€λ¨!)
console.log(newCart); // ['🍎'] (μƒˆλ‘œμš΄ λ°°μ—΄)

 

 

πŸš€ 더 쒋은 μ•‘μ…˜ λ§Œλ“€κΈ°

암묡적 μž…λ ₯(Implicit Input): ν•¨μˆ˜κ°€ λͺ…μ‹œμ μœΌλ‘œ 전달받지 μ•Šκ³ , μ™ΈλΆ€μ—μ„œ 데이터λ₯Ό 읽음
암묡적 좜λ ₯(Implicit Output): ν•¨μˆ˜κ°€ λ°˜ν™˜κ°’ 없이, μ™ΈλΆ€ μƒνƒœλ₯Ό 변경함

 

쒋은 μ•‘μ…˜μ€ 암묡적 μž…μΆœλ ₯을 μ΅œμ†Œν™”ν•˜κ³ , λͺ…μ‹œμ μœΌλ‘œ μ „λ‹¬ν•˜λŠ” ν•¨μˆ˜μΌ 수둝 더 쒋은 μ•‘μ…˜μ΄λΌκ³  ν‘œν˜„ν•œλ‹€. 


πŸš€ 암묡적 μž…λ ₯을 쀄이기

 

πŸ“Œ λƒ„μƒˆλ‚˜λŠ” μ½”λ“œ

const taxRate = 0.1; // 암묡적 μž…λ ₯ (ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό μ‚¬μš©)

function calculatePrice(price) {
  return price + price * taxRate; // μ™ΈλΆ€ λ³€μˆ˜(taxRate)에 의쑴
}

console.log(calculatePrice(100)); // 110

 

βœ… μˆ˜μ •λœ μ½”λ“œ

function calculatePrice(price, taxRate) {
  return price + price * taxRate; // ν•„μš”ν•œ κ°’(μ„ΈκΈˆ)을 λͺ…μ‹œμ μœΌλ‘œ 전달 βœ…
}

console.log(calculatePrice(100, 0.1)); // 110
console.log(calculatePrice(100, 0.2)); // 120 (μ„ΈκΈˆ λ³€κ²½ κ°€λŠ₯)

 

 

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ™ΈλΆ€ λ³€μˆ˜λ₯Ό 읽지 μ•Šκ³ , ν•„μš”ν•œ 값을 λ°›μ•„μ„œ μ‚¬μš©ν•˜κ²Œ λ˜λ©΄μ„œ, 

ν•¨μˆ˜κ°€ 항상 예츑 κ°€λŠ₯해지고 ν…ŒμŠ€νŠΈκ°€ μ‰¬μ›Œμ§„λ‹€.


πŸš€ 암묡적 좜λ ₯을 쀄이기

 


πŸ“Œ λƒ„μƒˆλ‚˜λŠ” μ½”λ“œ

function logMessage(message) {
  console.log(message); // 암묡적 좜λ ₯ (λ°˜ν™˜κ°’ 없이 μ™ΈλΆ€ 세계 λ³€κ²½)
}

logMessage("Hello, World!"); // μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ μ½˜μ†”μ΄ λ°”λ€œ

 

βœ… μˆ˜μ •λœ μ½”λ“œ

function formatMessage(message) {
  return `Log: ${message}`; // λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” μˆœμˆ˜ν•œ 계산 βœ…
}

console.log(formatMessage("Hello, World!")); // λͺ…μ‹œμ μΈ 좜λ ₯

 

μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ 좜λ ₯ν•  수 있고, ν…ŒμŠ€νŠΈλ„ 훨씬 μ‰¬μ›Œμ§„λ‹€.

 

 

πŸš€ 암묡적 μž…μΆœλ ₯을 μ€„μ΄λŠ” μž₯점 

βœ” μ˜ˆμΈ‘ κ°€λŠ₯μ„± μ¦κ°€ β†’ ν•¨μˆ˜κ°€ ν•­μƒ κ°™μ€ μž…λ ₯에 κ°™μ€ μΆœλ ₯을 λ°˜ν™˜ν•¨
βœ” ν…ŒμŠ€νŠΈ μš©μ΄ β†’ μ™ΈλΆ€ μƒνƒœλ₯Ό μ‹ κ²½ μ“°μ§€ μ•Šκ³  ν•¨μˆ˜λ§Œ ν…ŒμŠ€νŠΈ κ°€λŠ₯
βœ” μž¬μ‚¬μš©μ„± μ¦κ°€ β†’ ν•¨μˆ˜κ°€ νŠΉμ • ν™˜κ²½(Console, νŒŒμΌ λ“±)에 μ˜μ‘΄ν•˜μ§€ μ•ŠμŒ

728x90