Temp๋ฅผ Query๋กœ ๋Œ€์ฒดํ•˜๊ธฐ: ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•

Temp๋ฅผ Query๋กœ ๋Œ€์ฒดํ•˜๊ธฐ: ๋” ๊น”๋”ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•

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

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

์ž์‹ ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜์„ธ์š”

SMART TS XL ์ž„์‹œ ๋ณ€์ˆ˜, ์ค‘๋ณต ๊ณ„์‚ฐ ๋ฐ ์ถ”์ถœ๋œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์œ„์น˜๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

๋” ์•Œ์•„๋ณด๊ธฐ

์ฐจ๋ก€

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž„์‹œ ๋ณ€์ˆ˜(Temp)๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ž„์‹œ ๋ณ€์ˆ˜(์ผ๋ฐ˜์ ์œผ๋กœ ` temp` ๋ผ๊ณ  ํ•จ )๋Š” ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋กœ, ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋˜์–ด ์ด๋ฆ„์ด ์ง€์ •๋œ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ํ›„, ๋™์ผํ•œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋‚˜์ค‘์— ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋งŒ ์กด์žฌํ•˜๋ฉฐ, ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ  ๊ฐ์ฒด์˜ ์ƒํƒœ์—๋„ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ

# Python: base_price is a temp variable
def calculate_total(quantity, item_price):
    base_price = quantity * item_price   # temp: computed once, used below
    if base_price > 1000:
        return base_price * 0.95
    return base_price * 0.98

์ž๋ฐ”

// Java: basePrice is a temp variable
double basePrice = quantity * itemPrice;   // temp
if (basePrice > 1000) {
    return basePrice * 0.95;
}
return basePrice * 0.98;

ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ

// TypeScript: basePrice is a temp variable
const basePrice = quantity * itemPrice;    // temp
if (basePrice > 1000) return basePrice * 0.95;
return basePrice * 0.98;

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

์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ๋ฆฌํŒฉํ† ๋ง์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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

Temp๋ฅผ Query๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๊ฐ€ ์„ค๋ช…ํ•œ ์ˆ˜์‹ญ ๊ฐ€์ง€ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•ด์ง„ ๊ฒฝ์šฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ• ๊ณ„์—ด์— ์†ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ž„์‹œ ํŒŒ์ผ์„ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒดํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

`Temp`๋ฅผ `Query`๋กœ ๋ฐ”๊พธ๊ธฐ๋Š” ์ง€์—ญ ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ง€์—ญ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹ , ๊ณ„์‚ฐ ๊ณผ์ •์„ ๋ณ„๋„์˜ ๋ฉ”์„œ๋“œ์ธ `Query`๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ํ˜ธ์ถœ ์‹œ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. `Temp`๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๋ชจ๋“  ๊ณณ์—์„œ ํ•ด๋‹น ์ฐธ์กฐ๋ฅผ `Query` ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์šธ๋Ÿฌ์˜ ๋ฆฌํŒฉํ† ๋ง ์— ๋‚˜์˜ค๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ :

์ „์—:

์ž๋ฐ”

double basePrice = _quantity * _itemPrice;
if (basePrice > 1000)
    return basePrice * 0.95;
else
    return basePrice * 0.98;

ํ›„ :

์ž๋ฐ”

if (basePrice() > 1000)
    return basePrice() * 0.95;
else
    return basePrice() * 0.98;

private double basePrice() {
    return _quantity * _itemPrice;
}

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

์ž„์‹œ ๋ณ€์ˆ˜์˜ ๋ฌธ์ œ์ 

๊ทธ๋“ค์€ ๋ฐฉ๋ฒ•๋ก  ์ „๋ฐ˜์— ๊ฑธ์ณ ๋…ผ๋ฆฌ๋ฅผ ํŒŒํŽธํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ž„์‹œ ๋ณ€์ˆ˜๋Š” ๊ณ„์‚ฐ์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํ• ๋‹น ๋ถ€๋ถ„์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ์‚ฌ์šฉ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์งง์€ ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ๊ฐ€ 30์ค„์ด๋‚˜ 50์ค„ ์ •๋„๋กœ ๊ธธ์–ด์ง€๋ฉด, ํ• ๋‹น ๋ถ€๋ถ„๊ณผ ์‚ฌ์šฉ ๋ถ€๋ถ„ ์‚ฌ์ด์— ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์ค„์˜ ๋กœ์ง์ด ์‚ฝ์ž…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…์ž๋Š” ํ• ๋‹น ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์œ„๋กœ ์Šคํฌ๋กคํ•˜๊ณ , ๊ทธ ์˜๋ฏธ๋ฅผ ์ž‘์—… ๊ธฐ์–ต์— ์ €์žฅํ•œ ๋‹ค์Œ, ๋‹ค์‹œ ์‚ฌ์šฉ ๋ถ€๋ถ„์œผ๋กœ ์Šคํฌ๋กคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ด๋Ÿฌํ•œ ์ธ์ง€์  ๋ถ€๋‹ด์ด ๊ฐ€์ค‘๋ฉ๋‹ˆ๋‹ค.

์ถ”์ถœ ๋ฐฉ๋ฒ•์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค

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

๊ทธ๋“ค์€ ์žฌ์‚ฌ์šฉ๊ณผ ๋ณ€์ด๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค

์ž„์‹œ ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์šฉ๋„๋กœ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ํŒŒ์šธ๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ๊ด€ํ–‰์„ "์ž„์‹œ ๋ณ€์ˆ˜ ์—‰ํ‚ด"์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฆ„์ด ์ง€์ •๋œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. temp or result ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌํ• ๋‹น๋˜๋Š” ๋ณ€์ˆ˜๋Š” ์˜๋ฏธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํŠน์ • ์‹œ์ ์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€์— ๋Œ€ํ•ด ๋…์ž๋ฅผ ์˜ค๋„ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ๋‹จ์ผ ๋ชฉ์ ์˜ ์ž„์‹œ ๋ณ€์ˆ˜์กฐ์ฐจ๋„ ๋ˆ„์ ๋˜์–ด ๋ฉ”์„œ๋“œ์˜ ๋ฒ”์œ„๊ฐ€ ๋…์ž๊ฐ€ ๋™์‹œ์— ์ถ”์ ํ•ด์•ผ ํ•˜๋Š” ์ค‘๊ฐ„ ๊ฐ’์œผ๋กœ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด: ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ณ€ํ™˜ ๊ณผ์ •์€ ๋ชจ๋“  ์–ธ์–ด์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ๋งŒ ํ• ๋‹น๋˜๊ณ  ์ ˆ๋Œ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๋‚˜์ค‘์— ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค์‹œ ํ• ๋‹น๋˜๋Š” ๊ฒฝ์šฐ, ๋จผ์ € '์ž„์‹œ ๋ณ€์ˆ˜ ๋ถ„ํ• ' ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: ํ• ๋‹น๋ฌธ์˜ ์šฐ๋ณ€์„ ๋น„๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ณ„์‚ฐ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์œผ์„ธ์š”. basePrice() ๋ณด๋‹ค ๋” calculateQuantityTimesPrice().

3๋‹จ๊ณ„: ์ž„์‹œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ƒˆ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ IDE๋Š” ์ด ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜๊ณ  โ†’ ๋ฆฌํŒฉํ† ๋ง โ†’ ๋ณ€์ˆ˜ ์ธ๋ผ์ธ์„ ์„ ํƒํ•œ ๋‹ค์Œ, ์ธ๋ผ์ธ๋œ ํ‘œํ˜„์‹์—์„œ ๋ฉ”์„œ๋“œ ์ถ”์ถœ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์ž„์‹œ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์ž„์‹œ ๋ณ€์ˆ˜์—๋Š” ๋” ์ด์ƒ ์ฐธ์กฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java: ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์˜ˆ์ œ

์ž๋ฐ”

// Before: Order class with temporary variables
public class Order {
    private int quantity;
    private double itemPrice;

    public double getPrice() {
        double basePrice    = quantity * itemPrice;        // temp 1
        double discountFactor;                             // temp 2
        if (basePrice > 1000)
            discountFactor = 0.95;
        else
            discountFactor = 0.98;
        return basePrice * discountFactor;
    }
}

์ž๋ฐ”

// After: temps extracted to query methods
public class Order {
    private int quantity;
    private double itemPrice;

    public double getPrice() {
        return basePrice() * discountFactor();
    }

    private double basePrice() {
        return quantity * itemPrice;
    }

    private double discountFactor() {
        return basePrice() > 1000 ? 0.95 : 0.98;
    }
}

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

Python: ์ž„์‹œ(Temp)๋ฅผ ์†์„ฑ(Property)์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

ํŒŒ์ด์ฌ์—์„œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ํ‘œํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. @property์ด๋ฅผ ํ†ตํ•ด ๊ด„ํ˜ธ ์—†์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์†์„ฑ ์ ‘๊ทผ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ

# Before: temporary variables in a method
class Order:
    def __init__(self, quantity, item_price):
        self.quantity   = quantity
        self.item_price = item_price

    def get_price(self):
        base_price     = self.quantity * self.item_price  # temp
        discount       = 0.95 if base_price > 1000 else 0.98  # temp
        return base_price * discount

ํŒŒ์ด์ฌ

# After: temps replaced with properties (query methods in Python)
class Order:
    def __init__(self, quantity, item_price):
        self.quantity   = quantity
        self.item_price = item_price

    def get_price(self):
        return self.base_price * self.discount_factor

    @property
    def base_price(self):
        return self.quantity * self.item_price

    @property
    def discount_factor(self):
        return 0.95 if self.base_price > 1000 else 0.98

์‚ฌ์šฉ @property ๋ฐฉ๋ฒ• self.base_price ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ฝํžˆ๋ฏ€๋กœ ํ˜ธ์ถœ ์ฝ”๋“œ๊ฐ€ self.base_price * self.discount_factor ์™„์ „ํžˆ ์ž์—ฐ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ ์†์„ฑ์€ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ

def test_base_price():
    order = Order(10, 150)
    assert order.base_price == 1500

def test_discount_factor_high_value():
    order = Order(10, 150)   # base_price = 1500 > 1000
    assert order.discount_factor == 0.95

def test_get_price():
    order = Order(10, 150)
    assert order.get_price() == 1500 * 0.95

์ž„์‹œ ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜ ๋ฒ„์ „์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜์ค€์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๊ณ„์‚ฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. base_price discount_factor ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

TypeScript: ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐ ๊ฒŒํ„ฐ

TypeScript๋Š” ๋ฉ”์„œ๋“œ ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ์™€ ์†์„ฑ getter๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ๊ฐ Java์™€ Python์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ

// Before: temporary variables
class Order {
    constructor(private quantity: number, private itemPrice: number) {}

    getPrice(): number {
        const basePrice = this.quantity * this.itemPrice;  // temp
        const discount  = basePrice > 1000 ? 0.95 : 0.98; // temp
        return basePrice * discount;
    }
}

ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ

// After: TypeScript getters replace temps
class Order {
    constructor(private quantity: number, private itemPrice: number) {}

    getPrice(): number {
        return this.basePrice * this.discountFactor;
    }

    private get basePrice(): number {
        return this.quantity * this.itemPrice;
    }

    private get discountFactor(): number {
        return this.basePrice > 1000 ? 0.95 : 0.98;
    }
}

์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์ง€์ •ํ•˜๊ธฐ

์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ์ž˜๋ชป๋œ ์ถ”์ถœ ๋ฉ”์„œ๋“œ๋Š” ๋Œ€์ฒด๋œ ์ž„์‹œ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ถˆํˆฌ๋ช…ํ•œ ๊ฐ„์ ‘ ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœ์ž๋Š” ๋ฉ”์„œ๋“œ ์ •์˜๋ฅผ ์ฐพ์•„๋ด์•ผ๋งŒ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ถ”์ถœ์˜ ๋ชฉ์ ์ด ๋ฌด์˜๋ฏธํ•ด์ง‘๋‹ˆ๋‹ค.

์ข‹์€ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๋‹ค์Œ ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๊ณ„์‚ฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค. basePrice() ์‚ฌ์—… ๊ฐœ๋…์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. getQuantityTimesItemPrice() ์ด ์„ค๋ช…์€ ๊ฐœ๋…์ด ์•„๋‹Œ ๊ณ„์‚ฐ ๊ณผ์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ณ„์‚ฐ ๋ฐฉ์‹์ด๋‚˜ ๊ฐœ๋… ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ด ๊ตฌ๋ถ„์ด ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. basePrice() ๊ณต์‹์ด ๋ฐ”๋€Œ๋”๋ผ๋„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๊ฐ’์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ๋ช…์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค. discountFactor(), totalAmount(), isEligible() ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ด€๋ก€๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค. calculateDiscount(), processAmount() ๋ช…๋ นํ˜• ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์—๋Š” ํ˜ผ๋ž€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์šธ ์ฟผ๋ฆฌ๋Š” ์งˆ๋ฌธ ํ˜•ํƒœ๋กœ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. isHighValue(), hasDiscount(), meetsThreshold() ๋ฐ˜ํ™˜๊ฐ’์ด ๋ถ€์šธ ๊ฐ’์ด๋ฉฐ ํ˜ธ์ถœ์ž๊ฐ€ ์˜ˆ/์•„๋‹ˆ์˜ค ์งˆ๋ฌธ์„ ํ•˜๊ณ  ์žˆ์Œ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. bool ๅค‰ๆ•ฐๅ (๋ถ€์šธ ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ง€์ •, ๊ฒ€์ƒ‰ ์ฝ˜์†” ๋ฐ์ดํ„ฐ์˜ ์ฟผ๋ฆฌ)๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์šฐ๋ ค๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์šธ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ ์‹œ์ ์— ๊ทธ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๋Š” ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ด๋ฆ„์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”. If basePrice() ์‚ฌ์šฉ discountFactor()๋ช…๋ช…๋ฒ•์˜ ์ผ๊ด€์„ฑ์€ ๋…์ž๋“ค์—๊ฒŒ ๋‹ค์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. discountFactor ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค basePrice๋ช…๋ช… ๊ทœ์น™์ด ์ผ๊ด€๋˜์ง€ ์•Š์œผ๋ฉด ์ด๋Ÿฌํ•œ ์•”๋ฌต์ ์ธ ๋ฌธ์„œํ™”๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค.

์ž„์‹œ ํŒŒ์ผ์„ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒดํ•˜๋Š” ์‹œ์ ์€ ์–ธ์ œ์ธ๊ฐ€์š”?

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ด ๋ฆฌํŒฉํ† ๋ง์„ ์ ์šฉํ•˜์„ธ์š”:

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

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

์ž„์‹œ ๋Œ€์ฒด ๋ฐฉ๋ฒ•์„ ์ฟผ๋ฆฌ๋กœ ์ ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ์ž‘์—…. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ, ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ, O(nยฒ) ๋ฃจํ”„์™€ ๊ฐ™์ด ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ, ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๋น„์šฉ์ด ๋‘ ๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ๋ณ€์ˆ˜๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ฑฐ๋‚˜ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ)ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ

# Memoized property: computed once, cached
from functools import cached_property

class Order:
    @cached_property
    def expensive_validation(self):
        return self.external_service.validate(self.data)  # called once, cached

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

๋ฐ˜๋ณต๋ฌธ ์‹คํ–‰ ๋™์•ˆ ๋ˆ„์ ๋˜๋Š” ์˜จ๋„. ์˜จ๋„๋Š” ๋ˆ„์ ๋˜๋Š” ์˜จ๋„์ž…๋‹ˆ๋‹ค. for ๋ฃจํ”„ total += item.price`Project Temp`๋Š” `Replace Temp with Query`์˜ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. `Project Temp`๋Š” ํŒŒ์ƒ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต์„ ํ†ตํ•ด ๋ˆ„์ ๋˜๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋ฃจํ”„๊ฐ€ ๋ฌธ์ œ๋ผ๋ฉด `Replace Loop with Pipeline`์„ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.

๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•

`Replace Temp with Query`๋Š” ๋ฉ”์„œ๋“œ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ• ๊ณ„์—ด์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ• ๊ณ„์—ด์„ ์ดํ•ดํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋‹น๋ฉดํ•œ ๋ฌธ์ œ์— ์ ํ•ฉํ•œ ๊ธฐ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

Extract Method๋Š” ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Replace Temp with Query๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถ”์ถœ๋œ ๋ถ€๋ถ„๊ณผ ๋ฉ”์„œ๋“œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„ ์‚ฌ์ด์—์„œ ์–ด์ƒ‰ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ์ด ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ Extract Method๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ธ๋ผ์ธ ์ž„์‹œ ๋ณ€์ˆ˜๋Š” ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋กœ, ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ํ•ด๋‹น ํ‘œํ˜„์‹์œผ๋กœ ์ฝ”๋“œ ๋‚ด์—์„œ ์ง์ ‘ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ฃผ์ง€ ์•Š๊ณ  ํ•ด๋‹น ํ‘œํ˜„์‹์ด ์ด๋ฏธ ์ฝ๊ธฐ ์‰ฌ์šด ๊ฒฝ์šฐ์— ์ธ๋ผ์ธ ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ž„์‹œ ๋ณ€์ˆ˜ ๋ถ„ํ• ์€ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ํ•˜๋‚˜์˜ ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ์šฉ๋„๋กœ ์žฌ์‚ฌ์šฉ๋  ๋•Œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์šฉ๋„๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณ„๋„์˜ ๋ณ€์ˆ˜๋กœ ๋ถ„ํ• ํ•œ ๋‹ค์Œ, ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ์ผํšŒ์šฉ ์ž„์‹œ ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์— ์ฟผ๋ฆฌ๋กœ ์ž„์‹œ ๋ณ€์ˆ˜ ๋ฐ”๊พธ๊ธฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ฃจํ”„๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋Œ€์ฒดํ•˜์„ธ์š” ์ž„์‹œ ๋ˆ„์ ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฃจํ”„๋ฅผ ์—ฐ๊ฒฐ๋œ ํŒŒ์ดํ”„๋ผ์ธ ์—ฐ์‚ฐ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.map, filter, reduce)์ด ๋” ๋ช…ํ™•ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• SMART TS XL ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

`Replace Temp with Query`๋Š” ๋กœ์ปฌ ๋ฆฌํŒฉํ† ๋ง์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์„œ๋“œ ๋‚ด์˜ ๋ณ€์ˆ˜ ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทœ๋ชจ๊ฐ€ ํฐ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” "์ด ๋ฆฌํŒฉํ† ๋ง์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ๋ณด๋‹ค "์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์—์„œ ์–ด๋””์— ์ ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์ ์šฉํ–ˆ์„ ๋•Œ ์–ด๋–ค ๋ถ€๋ถ„์ด ์˜ํ–ฅ์„ ๋ฐ›์„๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

SMART TS XL ์ด ๋„๊ตฌ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์นœ ๊ตฌ์กฐ์  ๋ถ„์„์„ ์ œ๊ณตํ•˜์—ฌ ์ด ์งˆ๋ฌธ์— ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ณ„์‚ฐ์ด ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ์ž„์‹œ ๋ณ€์ˆ˜๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๊ณ , '์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒด' ๊ธฐ๋Šฅ์ด ๋‹จ์ผ ๋ช…๋ช…๋œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ํ†ตํ•ฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ํŒจํ„ด์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌํŒฉํ† ๋ง๋œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ถœ๋œ ํ›„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ถ”์ ํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง์ด ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ๋ฆฌํŒฉํ† ๋ง ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. COBOL ํ”„๋กœ๊ทธ๋žจ, Java ์„œ๋น„์Šค, Python ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ์ฝ”๋“œ ๋ถ„์„ ์˜ํ–ฅ ๋ถ„์„ ์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๋™์ผํ•œ ๋…ผ๋ฆฌ์  ๊ณ„์‚ฐ์ด ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ "์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒด" ๊ธฐ๋Šฅ์ด ๋‹จ์ผ ์–ธ์–ด ์ˆ˜์ค€์—์„œ ํ•ด๊ฒฐํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒ€์„ ์œ„ํ•ด ๋ ˆ๊ฑฐ์‹œ ํ˜„๋Œ€ํ™”, SMART TS XL์˜ ์ข…์†์„ฑ ์‹œ๊ฐํ™” ์ด๋ฅผ ํ†ตํ•ด ๋ฆฌํŒฉํ† ๋ง๋œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์–ด๋””์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ณ„์‚ฐ์„ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•˜๋”๋ผ๋„ ์›๋ž˜ ๊ตฌ์กฐ๋ฅผ ์˜ˆ์ƒํ–ˆ๋˜ ํ˜ธ์ถœ์ž๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž„์‹œ ๋ณ€์ˆ˜์™€ ์ž์ฒด ์„ค๋ช… ์ฝ”๋“œ

์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒดํ• ์ง€ ์—ฌ๋ถ€๋Š” ๊ถ๊ทน์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค. ์ž„์‹œ ๋ณ€์ˆ˜๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•œ ๊ณ„์‚ฐ ๊ณผ์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ๋„๋ฉ”์ธ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๊ฐ’์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Order ํด๋ž˜์Šค์—์„œ, basePrice() ์ด๋Š” ๋…์ž์—๊ฒŒ ํ•ด๋‹น ๊ฐœ๋…์ด ๊ทธ ์˜์—ญ์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. double x = quantity * itemPrice ๋…์ž์—๊ฒŒ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

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