๐Ÿ– ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - ์‹ฌํ”Œํ•œ ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ธธ๋“ค์ด๊ธฐ

์ด ๊ธ€์€ ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - ์‹ฌํ”Œํ•œ ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ธธ๋“ค์ด๊ธฐ๋ฅผ ์ฝ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜•๋„ ํ•จ์ˆ˜ํ˜•์ด์ง€๋งŒ, ์ด ์ฑ…์„ ํ†ตํ•ด ์ข€๋” ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ž€ ํŒ€์›๋“ค์˜ ์˜๊ฒฌ์„ ํ† ๋Œ€๋กœ ์ด๋ฒˆ ์Šคํ„ฐ๋”” ์„œ์ ์œผ๋กœ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Chap 5. ๋” ์ข‹์€ ์•ก์…˜ ๋งŒ๋“ค๊ธฐ

  • ์•”๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์ œ๊ฑฐํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ
  • ๋ณต์žกํ•˜๊ฒŒ ์—‰ํ‚จ ์ฝ”๋“œ๋ฅผ ํ’€๊ณ  ๋” ์ข‹์€ ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ

๋ชจ๋“  ์•ก์…˜์„ ์—†์•จ ์ˆ˜๋Š” ์—†๋‹ค. ์•ก์…˜์€ ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์•”๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์ค„์ž„์œผ๋กœ์จ ์•ก์…˜์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์„ค๊ณ„ ๊ณ ๋ คํ•˜๊ธฐ

  • ๊ธฐ๊ณ„์ ์ธ ๋ฆฌํŒฉํ† ๋ง๋งŒ์ด ํ•ญ์ƒ ์ตœ์„ ์˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ง„ ์•Š๋Š”๋‹ค.
  • ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ ์‚ฌํ•ญ: ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ œํ’ˆ์„ ์ฃผ๋ฌธํ•  ๋•Œ ๋ฌด๋ฃŒ ๋ฐฐ์†ก์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ

์•„๋ž˜ ํ•จ์ˆ˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์ธ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ œํ’ˆ์— ๋Œ€ํ•œ ๋‚ด์šฉ ์—†์ด ์ด์•ก๊ณผ ๋ฌด๋ฃŒ๋ฐฐ์†ก์— ๋Œ€ํ•œ ๋‚ด์šฉ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

function getFreeShipping(total, itemPrice) {
  return total + itemPrice >= 20;
}

์ด๋ฅผ ์ข€๋” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž๊ฒŒ ๊ฐœ์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

function getFreeShipping(cart) {
  return getTotalPriceFromCart(cart) >= 20;
}

function getTotalPriceFromCart(cart) {
  return cart.reduce((result, item) => result + item.price, 0);
}

์‚ฌ์‹ค ์œ„์˜ ๊ฒฝ์šฐ, ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ฆฌํŒฉํ† ๋ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค.

Tip1) ๋ฆฌํŒฉํ† ๋ง(ํ•จ์ˆ˜ ๋ถ„๋ฆฌ)์„ ํ•˜๋‹ค๋ณด๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๊ธธ์–ด์ง€๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๊ดœ์ฐฎ์€๊ฑด๊ฐ€?

  • ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜๋”๋ผ๋„ ์ข‹์€ ์ฝ”๋“œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
    Tip2) ๋ถˆ๋ณ€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒŒ ์˜คํžˆ๋ ค ๋น„์šฉ์„ ๋งŽ์ด ์“ฐ์ง€ ์•Š๋‚˜?
  • ๊ตณ์ด ๋น„๊ตํ•˜์ž๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค๋Š” ๋น„์šฉ์ด ๋” ๋“ ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„๋Œ€์˜ ์–ธ์–ด ๋Ÿฐํƒ€์ž„๊ณผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, ์ด์— ๋ฐ˜ํ•ด ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ–ˆ์„ ๋•Œ ์–ป๋Š” ์ด์ ์ด ๋„ˆ๋ฌด ํฌ๋‹ค.

2) ์••๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์€ ์ ์œผ๋ฉด ์ ์„์ˆ˜๋ก ์ข‹๋‹ค!

  • ์•”๋ฌต์  ์ž…๋ ฅ: ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์ฝ๋Š” ๋“ฑ ์ธ์ž ์™ธ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’
  • ์•”๋ฌต์  ์ถœ๋ ฅ: console.log(), DOM ๋ณ€๊ฒฝ, ์ „์—ญ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ๋“ฑ ๋ฐ˜ํ™˜๊ฐ’ ์™ธ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์ถœ๋ ฅ๊ฐ’

์–ด๋–ค ํ•จ์ˆ˜(์ปดํฌ๋„ŒํŠธ)์— ์•”๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ํ•จ์ˆ˜(์ปดํฌ๋„ŒํŠธ)์™€ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋œ๋‹ค. ์ด๋Š” ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. ์•”๋ฌต์ ์ธ ๊ฒƒ๋“ค์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณ„์‚ฐ: ์•”๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ์—†๋Š” ํ•จ์ˆ˜ => ๋ชจ๋“ˆํ™” ๊ฐ€๋Šฅ ๋ฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹๋‹ค.

3) ์„ค๊ณ„๋Š” ์—‰์ผœ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด๋‹ค.

  • ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜๋Š” ์ธ์ž์™€ ๋ฐ˜ํ™˜๊ฐ’์„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•œ๋‹ค.(๋„ˆ๋ฌด๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ input๊ณผ output์„ ๋‚˜๋ˆ„๊ฒŒ ๋˜๋‹ˆ๊นŒ)
  • ๋•Œ๋กœ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•ฉ์น˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์–ธ์ œ๋“  ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. ์ฆ‰, ๊ฐ€๋Šฅํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•ด๋‘๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์ž‘๊ฒŒ ๋ถ„๋ฆฌํ•ด๋‘์—ˆ์„ ๋•Œ์˜ ์ด์ 

  1. ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค.
  2. ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  3. ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๋‹ค.

4) ํŒจํ„ด ๋นผ๋‚ด๊ธฐ(์œ ํ‹ธ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ)

๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

function addItem(cart, item) {
  let newCart = [...cart];
  newCart.push(item);
  return newCart;
}

์ž˜ ์ƒ๊ฐํ•ด๋ณด์ž. ์œ„์˜ ํ•จ์ˆ˜๋Š” ๊ณผ์—ฐ cart(์žฅ๋ฐ”๊ตฌ๋‹ˆ)์—๋งŒ ํ•œ์ •๋œ ํ•จ์ˆ˜์ธ๊ฐ€??? ์•„๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฐ์—ด(cart)์— ์ƒˆ๋กœ์šด ๊ฐ’(item)์„ ์ถ”๊ฐ€ํ•˜๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

function addItem(array, item) {
  let newArray = [...array];
  newArray.push(item);
  return newArray;
}

์ด๋กœ์จ ์˜๋ฏธ์ ์œผ๋กœ ์ข€๋” ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

Tip1) ์ฝ”๋“œ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • ์˜ˆ๋ฅผ ๋“ค์–ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์„œ๋น„์Šค์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ๊ทธ ์„œ๋น„์Šค๋งŒ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค.
  • ๋ฐ˜๋ฉด ์ด ๊ฐ€๊ฒฉ์ด 50,000์›์ด ๋„˜์–ด๊ฐˆ ๋•Œ๋Š” ๋ฐฐ์†ก๋น„๊ฐ€ ๋ฌด๋ฃŒ๋ผ๋Š” ๊ธฐ๋Šฅ์€ ๊ทธ ์„œ๋น„์Šค๋งŒ์˜ ๋กœ์ง์ด๋‹ค. ์ฆ‰, ๊ทธ ์„œ๋น„์Šค๋งŒ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋” ์ž์ฃผ ๋ฐ”๋€๋‹ค.(๊ธฐํš์— ๋”ฐ๋ผ์„œ ์–ธ์ œ๋“  ๋ณ€๊ฒฝ๋˜๋‹ˆ๊นŒ) ๋ฐ˜๋ฉด์— ์œ ํ‹ธ ํ•จ์ˆ˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

5) ์ •๋ฆฌ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์•”๋ฌต์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์€ ๋ช…์‹œ์  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ธ ์ธ์ž์™€ ๋ฆฌํ„ด๊ฐ’๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ์—‰์ผœ์žˆ๋Š” ๊ฒƒ์„ ํ‘ธ๋Š” ๊ฒƒ์ด๋‹ค. ์ตœ๋Œ€ํ•œ ๋งŽ์ด ํ’€์–ด๋‘๋ฉด ์–ธ์ œ๋“  ์‰ฝ๊ฒŒ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—‰์ผœ์žˆ๋Š” ๊ฒƒ์„ ํ’€์–ด ๊ฐ ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ž ํ•˜๋‚˜์˜ ์ฑ…์ž„, ์—ญํ• ์„ ๊ฐ–๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋…์„ ๊ธฐ์ค€์œผ๋กœ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(ex. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ, ๋ฐฐ์†ก๋น„ ๊ธฐ๋Šฅ, ํ• ์ธ ๊ธฐ๋Šฅ, ์œ ํ‹ธ ํ•จ์ˆ˜ ๋“ฑ)