์์ ๋ณ์๋ ์ํํธ์จ์ด ์ฝ๋์์ ๋ถํ์ํ ๋ณต์ก์ฑ์ ์ผ๊ธฐํ๋ ๊ฐ์ฅ ํํ ์์ธ ์ค ํ๋์ ๋๋ค. ์ด๋ฌํ ๋ณ์๋ค์ ๊ธด ๋ฉ์๋์ ๋์ ๋๊ณ , ๊ณ์ฐ๋ ๊ฐ์ ๋ชจํธํ ์ด๋ฆ์ ๋ถ์ฌํ๋ฉฐ, ๋ณ์์ ์ ์ฅ๋ ๋ก์ง์ ์ถ์ถ, ํ ์คํธ ๋๋ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๋งํด ํ์ธ๋ฌ๊ฐ ์ ์ ใ๋ฆฌํฉํ ๋ง: ๊ธฐ์กด ์ฝ๋ ์ค๊ณ ๊ฐ์ ใ ์์ ์๊ฐํ '์์ ๋ณ์๋ฅผ ์ฟผ๋ฆฌ๋ก ๋์ฒด' ๋ฆฌํฉํ ๋ง์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ง์ ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค. ์ฆ, ๊ณ์ฐ๋ ๊ฐ์ ์ง์ญ ๋ณ์์ ์ ์ฅํ๋ ๋์ , ๊ณ์ฐ ๊ณผ์ ์ ๋ช ๋ช ๋ ๋ฉ์๋(์ฟผ๋ฆฌ)๋ก ์ถ์ถํ๊ณ , ๊ฐ์ด ํ์ํ ๋๋ง๋ค ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ, ์๋๋ฅผ ์จ๊ธฐ๋ ๋์ ๋ช ํํ๊ฒ ์ ๋ฌํ๋ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๋๋ค. ๋ ์ด์ ๊ธด ๋ฉ์๋ ๋งจ ์์ ๋ณ์ ํ ๋น์ผ๋ก ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์จ๊ธฐ์ง ์๊ณ , ์ด๋ฆ๊ณผ ์์น๋ฅผ ๋ช ํํ ํ๋ฉฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ๊ธ์์๋ ์์ ๋ณ์์ ์ ์, ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ, 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 ๋
์์๊ฒ ์ฐ์ ์ฐ์ฐ์ ๋ํด ์๋ ค์ค๋๋ค.
์ฝ๋๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋๋ฉ์ธ ๊ฐ๋ ์ ์์ ์ ์ธ ์์น๋ฅผ ํ์๋ก ํฉ๋๋ค. ์์ ๋ณ์์ ํฌํจ๋ ๊ณ์ฐ์ ๋ณ๊ฒฝ๋ ์ ์๊ณ , ์ฌ๋ฌ ๋ฉ์๋์์ ์ค๋ณต๋ ์ ์์ผ๋ฉฐ, ๋ค์์ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฐ๋ฐ์๊ฐ ์คํดํ ์๋ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋ช ๋ช ๋ ์ฟผ๋ฆฌ ๋ฉ์๋๋ ์ฐพ๊ธฐ ์ฝ๊ณ , ํ ์คํธ ๊ฐ๋ฅํ๋ฉฐ, ๋ฌธ์ํ๋๊ณ , ์๋์ ์ผ๋ก ๋ฐ์ ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์ ์ฑ์ ๊ณ์ฐ์ด ํ์ํ ๋ชจ๋ ๊ณณ๊ณผ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๊ฑธ์ณ ์ ์ง๋์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์์ ๋ณ์๋ฅผ ์ฟผ๋ฆฌ ๋ฉ์๋๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ๋จ์ํ ๊ตฌ๋ฌธ ๋ณ๊ฒฝ ์ด์์ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ด์ ์ ๋๋ค. ์ด๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ํด๊ฒฐํ๋ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์ ๋ฌํ ์ง์ ๋ํ ๊ฒฐ์ ์ ๋๋ค.


