ํด๋น ๊ธ์ Kent-Beck์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ By Example ์ด๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ์์ ํ์ธํด์ฃผ์ธ์.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ - Test Driven Development By Example (Kent-Beck)
- ์ธ์ฌ์ดํธ(insight)
- ์ง์์ด: Kent-Beck
- ์ฎ์์ด: ๊น์ฐฝ์ค, ๊ฐ๊ท์ญ
- ์ถ๊ฐ์ผ: 2014.02.15
TDD ์ต์ข ๋ชฉํ
TDD ์ ์ต์ข
๋ชฉํ๋ Clean Code That Works ์ด๋ค.
์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋จธ๋ค์ Clean Code That Works๋ฅผ ํ ๋ฒ์ ์ํํ๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก Clean Code์ Code That Works๋ฅผ ์๋ก ๋๋ ์ ์๊ฐํ์๋ ๊ฒ์ด๋ค.
์ด๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๋ ๋ถํ ์ ๋ณต์ ๊ธฐ๋ฒ์ด๋ค.
์ฌ๊ณผ์ ์ค๋ ์ง
์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ ์์์ ์ด์ฉํด์ Money๋ฅผ ์์๋ฐ๋ Dollar ํด๋์ค์ Franc ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ Dollar์ Franc์ ์ค๋ณต๋๋ ์ฝ๋ equals()
๋ฅผ Money๋ก ์ฎ๊ฒผ๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ณธ์ง์ ์ผ๋ก Dollar๋ Franc๋ ๊ฐ์ ํด๋์ค๋ฅผ ์์๋ฐ์์ง๋ง ์์ฐํ ์๋ก ๋ค๋ฅธ ํด๋์ค์ด๋ค.
๊ฒฐ๊ตญ Money์์ ์์๋ฐ๋ equals()
์๋ ์ค๋ฅ๊ฐ ์๋ค.
์? equals()
์์๋ ๋จ์ง amount
์ ํ๋ ๊ฐ๋ง ๋ณด๊ณ ๋น๊ต๋ฅผ ํ๊ธฐ ๋๋ฌธ์.
๊ทธ๋์ ์ด๋ฒ์๋ equals()
๋ฅผ ๋ฐ๊ฟ๋ณด๋๋กํ์.
TDD ์์
์คํจํ๋ ์ฝ๋ ์์ฑ
@Test
void testEquality() {
assertEquals(new Dollar(5), new Dollar(5));
assertNotEquals(new Franc(5), new Franc(1));
assertNotEquals(new Dollar(5), new Franc(5));
}
class Money {
protected int amount;
@Override
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount;
}
}
๋น์ฐํ ์คํจํ๋ค.
์ฐ๋ฆฌ์ ๋ชฉ์ ์ ๊ธ์ก๋ ๊ฐ๊ณ , ํด๋์ค๋ ๊ฐ์ ๋ true ๋ฐํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋งํ์.
@Override
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount // ๊ธ์ก์ด ๊ฐ๊ณ
&& getClass.equals(object.getClass()); // ํด๋์ค๋ ๊ฐ์ ๋
}
์๋๋ผ๋ฉด ์ด๋ฐ์์ผ equals ๋ ์ ์ ํ์ง ์๋ค.
ํ์ง๋ง ์์ง๊น์ง๋ ํ์คํ ๋ค๋ฅธ ๋์์ธ์ ์ ์ฉํด์ผํ๋ค๋ ๋๊ธฐ๊ฐ ์์ผ๋ ์ด๋๋ก ๋์ด๊ฐ๋ ์ถฉ๋ถํ๋ค.
๋๊ธ