YesCoding

Go to English
search:

[Refactoring 2ํŒ] Chapter 6-3 ๋ณ€์ˆ˜ ์ถ”์ถœํ•˜๊ธฐ

๋ฆฌํŒฉํ„ฐ๋ง 2ํŒ์„ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๊ธ€๋กœ, ์ƒ๋žต๋œ ๋ถ€๋ถ„์ด ์žˆ๊ฑฐ๋‚˜ ์ž˜๋ชป ์ดํ•ดํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…๊ณผ ์›์น™

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

์ฝ”๋“œ ์˜ˆ์‹œ


๋ฆฌํŒฉํ† ๋ง ์ „

... 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(order.quantity * order.itemPrice * 0.1, 100); return basePrice - quantityDiscount + shipping;

3์ค„์งœ๋ฆฌ ์ฝ”๋“œ๊ฐ€ 4์ค„์ด ๋˜์—ˆ์ง€๋งŒ ์ฝ”๋“œ ์ดํ•ด๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ธํ•ด ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ๋‹ค. ๐Ÿ‘

์ ˆ์ฐจ

  1. ์ถ”์ถœํ•˜๋ ค๋Š” ํ‘œํ˜„์‹์— ๋ถ€์ž‘์šฉ์€ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜(const)๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•˜๊ณ  ์ด๋ฆ„์„ ๋ถ™์ด๊ณ  ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ธด๋‹ค.
  3. ์›๋ณธ ํ‘œํ˜„์‹์˜ ์ •์˜๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

ํด๋ž˜์Šค ์•ˆ์—์„œ์˜ ๋ณ€์ˆ˜ ์ถ”์ถœ (๋ฉ”์„œ๋“œ ์ถ”์ถœ)

ํด๋ž˜์Šค ๋ฌธ๋งฅ ์•ˆ์—์„œ์˜ ์ผ€์ด์Šค๋ฅผ ์‚ดํŽด๋ณด์ž.

๋ฆฌํŒฉํ† ๋ง ์ „

class Order { constructor(aRecord) { this._data = aRecord } get quantity() { return this._data.quantity; } get itemPrice() { return this._data.itemPrice; } get price() { return this.quantity * this.itemPrice - Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 + Math.min(order.quantity * order.itemPrice * 0.1, 100); } }

๋ฆฌํŒฉํ† ๋ง ํ›„

์ด ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ํด๋ž˜์Šค ์•ˆ์—์„œ๋Š” ๋ณ€์ˆ˜๋กœ ์ถ”์ถœํ•˜๋ ค๋Š” ๋ถ€๋ถ„์ด price ๋ฉ”์„œ๋“œ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ Order ํด๋ž˜์Šค ์ „์ฒด์— ์ ์šฉ๋œ๋‹ค. ํด๋ž˜์Šค ์ „์ฒด์— ์˜ํ–ฅ์„ ์ค„ ๋•Œ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

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 this.quantity * this.itemPrice } get quantityDiscount() { return Math.max(0, this.quantity - 500) * this.itemPrice * 0.05; } get shipping() { return Math.min(this.basePrice * 0.1, 100);} }

๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก๐Ÿ’ก

  1. ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ๋Š”, ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์†ํ•œ ๋ฒ”์œ„์™€ ๋ฌธ๋งฅ๊นŒ์ง€ ๋„“๊ฒŒ ๊ณ ๋ฏผํ•˜์ž.
  2. ๊ฐ์ฒด๋Š” ํŠน์ • ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์™€ ๊ณต์œ ํ•˜๋ ค ํ•  ๋•Œ ๊ณต์œ ํ•  ์ •๋ณด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์ ๋‹นํ•œ ํฌ๊ธฐ์˜ ๋ฌธ๋งฅ์ด ๋˜์–ด์ค€๋‹ค. ๋ฉ์น˜๊ฐ€ ํฐ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต ๋™์ž‘์„ ๋ณ„๋„ ์ด๋ฆ„์œผ๋กœ ๋ฝ‘์•„๋‚ด์„œ ์ถ”์ƒํ™”ํ•ด๋‘๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.
Recommend Post
ยฉ Copyright 2022, yesCoding