๐ Chapter 1: ๋ค์ค ํตํ๋ฅผ ์ง์ํ๋ Money ๊ฐ์ฒด
P.41 ์ฐธ๊ณ
๋ค์ค ํตํ๋ฅผ ์ง์ํ๋ ๋ณด๊ณ ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ํตํ ๋จ์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ๋ํ ํ์จ๋ ๋ช ์ํด์ผ ํ๋ค.
์๋ก์ด ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ ค๋ฉด ์ด๋ค ๊ธฐ๋ฅ๋ค์ด ์์ด์ผ ํ ๊น? ์ฆ ์ด๋ค ํ ์คํธ๋ค์ด ์์ด์ผ ๋ณด๊ณ ์์ ์ ๋๋ก ๊ณ์ฐ๋๋๋ก ํ๋ ์ฝ๋๊ฐ ์์ฑ๋๋ค๋ ๊ฑธ ํ์ ํ ์ ์์๊น?
- ํตํ๊ฐ ๋ค๋ฅธ ๋ ๊ธ์ก์ ๋ํด์ ์ฃผ์ด์ง ํ์จ์ ๋ง๊ฒ ๋ณํ ๊ธ์ก์ ๊ฒฐ๊ณผ๋ก ์ป์ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ค ๊ธ์ก(์ฃผ๊ฐ)์ ์ด๋ค ์(์ฃผ์์ ์)์ ๊ณฑํ ๊ธ์ก์ ๊ฒฐ๊ณผ๋ก ์ป์ ์ ์์ด์ผ ํ๋ค.
์ฐ์ ์ด๋ค ํ
์คํธ๊ฐ ํ์ํ ๊น? ํ ์ผ ๋ชฉ๋ก์ ๋ณด๋ ์ฒซ ๋ฒ์งธ ํ
์คํธ๋ ์ข ๋ณต์กํด ๋ณด์ธ๋ค. ์์ ๊ฒ๋ถํฐ ์์ํ๋ ์ง, ์๋๋ฉด ์์ ์์ ๋์ง ์๋ ๊ฒ ์ข๋ค. ์ด๋ฒ์ ๋ค์ ํญ๋ชฉ์ธ ๊ณฑํ๊ธฐ๋ฅผ ๋ณด์. ๋๋จํ ์ด๋ ต์ง ์๊ฒ ์ง? ์ด๊ฑธ ๋จผ์ ํ๋ ๊ฒ ์ข๊ฒ ๋ค.
ํ
์คํธ๋ฅผ ์์ฑํ ๋๋ ์คํผ๋ ์ด์
์ ์๋ฒฝํ ์ธํฐํ์ด์ค์ ๋ํด ์์ํด๋ณด๋ ๊ฒ์ด ์ข๋ค.
public void testMultiplication() {
Dollar five = new Dollar(5);
five.times(2);
assertEquals(10, five.amount);
}
๋ฐฉ๊ธ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํ ์คํธ๋ ์์ง ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์๋๋ค. ํ์ฌ ๋ค ๊ฐ์ ์ปดํ์ผ ์๋ฌ๊ฐ ์๋ค.
Dollar
ํด๋์ค๊ฐ ์์- ์์ฑ์๊ฐ ์์
times
(int
) ๋ฉ์๋๊ฐ ์์amount
ํ๋๊ฐ ์์
ํ ๋ฒ์ ํ๋์ฉ ์ ๋ณตํ๊ธฐ๋ก ํ์. Dollar
ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ์๋ฌ ํ๋๋ ์์จ ์ ์๋ค.
class Dollar
์๋ฌ๊ฐ ํ๋ ์์ด์ก์ผ๋ ์ด์ ์ธ ๊ฐ ๋จ์๋ค. ์ด์ ์์ฑ์๋ฅผ ๋ง๋ค์ด๋ณด์. ๊ทธ๋ฅ ์ปดํ์ผ๋ง ๋๊ฒ ํ ๊ฑฐ๋๊น ์์ฑ์ ์์์๋ ์๋ฌด ์ผ๋ ์ ํด๋ ๋๋ค.
Dollar(int amount) {
// ...
}
์ด์ times()
์ ์คํ
๊ตฌํ์ด ํ์ํ๋ค. ์ด๋ฒ์๋ ์ญ์ ์ปดํ์ผ๋ง ๋ ์ ์๊ฒ ํด์ฃผ๋ ์ต์ํ์ ๊ตฌํ๋ง ํ ๊ฒ์ด๋ค.
void times(int multiplier) {
// ...
}
์ด์ ํ๋ ๋จ์๋ค. ๋ง์ง๋ง์ผ๋ก amount
ํ๋๋ฅผ ์ถ๊ฐํ์.
int amount;
์ด์ ํ
์คํธ๋ฅผ ์คํํด์ ํ
์คํธ๊ฐ ์คํจํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๊ฒ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ฝ๋ ์กฐ๊ฐ์ ์คํํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ก 10
์ด ๋์์ผ ํ๋๋ฐ 0
์ด ๋์๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค. ๋ง์ฐํ ์คํจํ๋ค๋ ์ฌ์ค๋ง ์๋ ๊ฒ๋ณด๋ค ๋์์ง ๊ฒ์ด๋ค.
๋ด๊ฐ ์์ํ ์ ์๋ ์ต์ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
int amount = 10;
ํ
์คํธ๋ฅผ ์คํํด๋ณด๋ฉด ์ด๋ก ๋ง๋๋ฅผ ๋ณด๊ฒ ๋๋ค. ํ์ง๋ง ์ฃผ๊ธฐ๊ฐ ์์ง ์์ฑ๋์ง ์์๋ค.
์ฃผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. ์์ง ๋ง ๊ฒ.
- ์์ ํ ์คํธ๋ฅผ ํ๋ ์ถ๊ฐํ๋ค.
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํด์ ํ ์คํธ๊ฐ ์คํจํ๋ ๊ฒ์ ํ์ธํ๋ค.
- ์กฐ๊ธ ์์ ํ๋ค.
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํด์ ํ ์คํธ๊ฐ ์ฑ๊ณตํ๋ ๊ฒ์ ํ์ธํ๋ค.
- ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ฆฌํฉํ ๋ง์ ํ๋ค.
์ฃผ๊ธฐ์ 1๋ฒ๋ถํฐ 4๋ฒ ํญ๋ชฉ๊น์ง๋ฅผ ์ํํ๋ค. ์ด์ ์ค๋ณต์ ์ ๊ฑฐํ ์ฐจ๋ก๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋๊ฐ ์ค๋ณต์ด๋ ๋ง์ธ๊ฐ? ๋ณดํต ์ฌ๋ฌ๋ถ์ ์ค๋ณต์ ์ฐพ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋น๊ตํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ฒ ๊ฒฝ์ฐ์ ์ค๋ณต์ด ํ ์คํธ์ ์๋ ๋ฐ์ดํฐ์ ์ฝ๋์ ์๋ ๋ฐ์ดํฐ ์ฌ์ด์ ์กด์ฌํ๋ค. ๋ชป ์ฐพ๊ฒ ๋๊ฐ? ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ค๋ฉด ์ด๋ ์๊น?
int amount = 5 * 2;
์ฌ๊ธฐ์์ 10์ ๋ค๋ฅธ ์ด๋๊ฐ์์ ๋์ด์จ ๊ฐ์ด๋ค. ์ฌ์ค ์ฐ๋ฆฐ ์ฐ๋ฆฌ๊ฐ ์ธ์์กฐ์ฐจ ํ ์ ์์ ๋งํผ ๋นจ๋ฆฌ ๋จธ๋ฆฟ์์ผ๋ก ๊ณฑ์
์ ์ํํ ๊ฒ์ด๋ค. ์ด์ 5์ 2๊ฐ ๋ ๊ณณ์ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฐ ๋ฌด์๋นํ๊ฒ ์ด ์ค๋ณตใ
ใน ์ ๊ฑฐํด์ผ ํ๋ค. ๊ท์น์ด ๊ทธ๋ฌ๋๊น.
5์ 2๋ฅผ ํ ๋ฒ์ ์ ๊ฑฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ค. ํ์ง๋ง ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ๋จ๊ณ์ ์๋ ์ค์ ์ฝ๋๋ฅผ times()
๋ฉ์๋ ์์ผ๋ก ์ฎ๊ฒจ๋ณด๋ฉด ์ด๋จ๊น?
int amount;
void times(int multiplier) {
amount = 5 * 2;
}
ํ ์คํธ๋ ์ฌ์ ํ ํต๊ณผํ๊ณ ํ ์คํธ ๋ง๋ ์ญ์ ์ด๋ก์์ด๋ค.
์ด ๋จ๊ณ๊ฐ ๋๋ฌด ์๊ฒ ๋๊ปด์ง๋๊ฐ? ํ์ง๋ง ๊ธฐ์ตํ๊ธฐ ๋ฐ๋๋ค. TDD์ ํต์ฌ์ ์ด๋ฐ ์์ ๋จ๊ณ๋ฅผ ๋ฐ์์ผ ํ๋ค๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฐ ์์ ๋จ๊ณ๋ฅผ ๋ฐ์ ๋ฅ๋ ฅ์ ๊ฐ์ถ์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋ด๊ฐ ์ผ์์์ ํญ์ ์ด๋ฐ ์์ผ๋ก ์์ ํ๋์ง ๊ถ๊ธํ๊ฐ? ๊ทธ๋ ์ง ์๋ค. ํ์ง๋ง ์ผ์ด ์ข ๋ฌํ๊ฒ ๊ผฌ์ด๊ธฐ ์์ํ๋ฉด ๋ ์์ ๋จ๊ณ๋ฅผ ๋ฐ์ ๋ฅ๋ ฅ์ด ๋ด๊ฒ ์๋ค๋ ์ฌ์ค์ ๊ธฐ๋ปํ๊ฒ ๋๋ค. ๋ง์ฝ ์ ๋ง ์์ ๋จ๊ณ๋ก ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ฉด, ์ ์ ๋ก ์ ์ ํ ํฌ๊ธฐ์ ๋จ๊ณ๋ก ์์ ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ํฐ ๋จ๊ณ๋ก๋ง ์์ ํ๋ค๋ฉด, ๋ ์์ ๋จ๊ณ๊ฐ ์ ์ ํ ๊ฒฝ์ฐ์ ๋ํด ๊ฒฐ์ฝ ์์ง ๋ชปํ๊ฒ ๋๋ค.
์์ฑ์์์ ๋์ด์ค๋ ๊ฐ์ด๋ ์ด๊ฑธ ๋ค์๊ณผ ๊ฐ์ด amount
๋ณ์์ ์ ์ฅํ๋ฉด,
Dollar(int amount) {
this.amount = amount;
}
๊ทธ๊ฑธ times()
์์ ์ฌ์ฉํ ์ ์๋ค.
void times(int multiplier) {
amount = amount * 2;
}
์ธ์ multiplier
์ ๊ฐ์ด 2์ด๋ฏ๋ก, ์์๋ฅผ ์ด ์ธ์๋ก ๋์ฒดํ ์ ์๋ค.
void times(int multiplier) {
amount = amount * multiplier;
}
์ฐ์ฐ์๋ฅผ ๋ณ๊ฒฝํด์ค ์ ์๋ค.
void times(int multiplier) {
amount *= multiplier;
}
์ด์ ์ฒซ ๋ฒ์งธ ํ ์คํธ์ ์๋ฃ ํ์๋ฅผ ํ ์ ์๊ฒ ๋๋ค.
์ง๊ธ๊น์ง ํ ์์ ์ ๊ฒํ ํด๋ณด์. ์ฐ๋ฆฌ๋ ๋ค์ ์์ ๋ค์ ํด๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์์ ํด์ผ ํ ํ ์คํธ ๋ชฉ๋ก์ ๋ง๋ค์๋ค.
- ์คํผ๋ ์ด์ ์ด ์ธ๋ถ์์ ์ด๋ป๊ฒ ๋ณด์ด๊ธธ ์ํ๋์ง ๋งํด์ฃผ๋ ์ด์ผ๊ธฐ๋ฅผ ์ฝ๋๋ก ํํํ๋ค.
- JUnit์ ๋ํ ์์ธํ ์ฌํญ๋ค์ ์ ์ ๋ฌด์ํ๊ธฐ๋ก ํ๋ค.
- ์คํ ๊ตฌํ์ ํตํด ํ ์คํธ๋ฅผ ์ปดํ์ผํ๋ค.
- ๋์ฐํ ์ฃ์ ์ ๋ฒํ์ฌ ํ ์คํธ๋ฅผ ํต๊ณผ์์ผฐ๋ค.
- ๋์๊ฐ๋ ์ฝ ๋์์ ์์๋ฅผ ๋ณ์๋ก ๋ณ๊ฒฝํ์ฌ ์ ์ง์ ์ผ๋ก ์ผ๋ฐํํ๋ค.
- ์๋ก์ด ํ ์ผ๋ค์ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋์ ํ ์ผ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณ ๋์ด๊ฐ๋ค.