Extract Variable, ๋ณ€์ˆ˜ ์ถ”์ถœํ•˜๊ธฐ๋ฅผ ์•Œ์•„๋ณด์ž.

์š”์•ฝ

์ฝ”๋“œ

return order.quantity * order.itemPrice -
    Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
    Math.min(order.quantity * order.itemPrice * 0.1, 100);
const basePrice = order.quantity * order.itemPrice;
const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05;
const shipping = Math.min(basePrice * 0.1, 100);
return basePrice - quantityDiscount + shipping;

๋ฐฐ๊ฒฝ

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

์ ˆ์ฐจ

  1. ์ถ”์ถœํ•˜๋ ค๋Š” ํ‘œํ˜„์‹์— ๋ถ€์ž‘์šฉ์€ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•˜๊ณ  ์ด๋ฆ„์„ ๋ถ™์ผ ํ‘œํ˜„์‹์˜ ๋ณต์ œ๋ณธ์„ ๋Œ€์ž…ํ•œ๋‹ค.
  3. ์›๋ณธ ํ‘œํ˜„์‹์„ ์ƒˆ๋กœ ๋งŒ๋“  ๋ณ€์ˆ˜๋กœ ๊ต์ฒดํ•œ๋‹ค.
  4. ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  5. ํ‘œํ˜„์‹์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ์„ ์ƒˆ๋กœ ๋งŒ๋“  ๋ณ€์ˆ˜๋กœ ๊ต์ฒดํ•œ๋‹ค. ํ•˜๋‚˜ ๊ต์ฒดํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธํ•œ๋‹ค.

๋”ฐ๋ผํ•˜๊ธฐ

function price(order) {
    // ๊ฐ€๊ฒฉ(price) = ๊ธฐ๋ณธ ๊ฐ€๊ฒฉ - ์ˆ˜๋Ÿ‰ ํ• ์ธ + ๋ฐฐ์†ก๋น„
    return order.quantity * order.itemPrice -
        Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
        Math.min(order.quantity * order.itemPrice * 0.1, 100);
}
  • ์ด ์ƒํ™ฉ์—์„œ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ„์–ด ์ถ”๊ฐ€์ •๋ณด๋ฅผ ๋„ฃ์–ด๋ณด์ž.
function price(order) {
    // ๊ฐ€๊ฒฉ(price) = ๊ธฐ๋ณธ ๊ฐ€๊ฒฉ - ์ˆ˜๋Ÿ‰ ํ• ์ธ + ๋ฐฐ์†ก๋น„
    const basePrice = order.quantity * order.itemPrice;
    return basePrice -
        Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
        Math.min(order.quantity * order.itemPrice * 0.1, 100);
}
  • ๊ต์ฒดํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  • ๋” ๋งŽ์€ ๊ณณ์—์„œ ํ•ด๋‹น ํ‘œํ˜„์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋Œ€์ฒดํ•œ๋‹ค.
  • ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋„ ์ ์šฉํ•œ๋‹ค.

ํด๋ž˜์Šค์•ˆ์ด๋ผ๋ฉด

class Order {
    constructor(aRecord) {
        this._data = aRecord;
    }
 
    get quantity() {return this._data.quantity;}
    get itemPrice() {return this._data.itemPrice;}
 
    get price() {
        return order.quantity * order.itemPrice -
        Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
        Math.min(order.quantity * order.itemPrice * 0.1, 100);
    }
}
  • ์ถ”์ถœํ•˜๋ ค๋Š” ๋ณ€์ˆ˜์ž์ฒด์˜ ์˜๋ฏธ๊ฐ€ ํด๋ž˜์Šค ์ „๋ฐ˜์— ์˜ํ–ฅ์„ ์ค€๋‹ค๋ฉด๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•˜์ž.
class Order {
    constructor(aRecord) {
        this._data = aRecord;
    }
 
    get quantity() {return this._data.quantity;}
    get itemPrice() {return this._data.itemPrice;}
 
    get price() {
        return this.basePrice - this.quantityDiscount + this.shipping;
    }
 
    get basePrice() {
        return order.quantity * order.itemPrice;
    }
 
    get quantityDiscount() {
        return Math.max(0, order.quantity - 500) * order.itemPrice * 0.05;
    }
 
    get shipping() {
        return Math.min(order.quantity * order.itemPrice * 0.1, 100);
    }
}
  • ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์žฅ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์š”์ฒญ๊ณผ ์‘๋‹ต์— ์žˆ์–ด ํ•˜๋‚˜์˜ ์ถ”์ƒ์ ์ธ ๋ฌธ๋งฅ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์„œ ๋™์ž‘์˜ ์„ค๋ช…์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

Reference