๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ - ์ผ„ํŠธ ๋ฒก (์‚ฌ๊ณผ์™€ ์˜ค๋ Œ์ง€)

by Wonit 2021. 4. 10.

ํ•ด๋‹น ๊ธ€์€ 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 ๋Š” ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.
ํ•˜์ง€๋งŒ ์•„์ง๊นŒ์ง€๋Š” ํ™•์‹คํžˆ ๋‹ค๋ฅธ ๋””์ž์ธ์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๋™๊ธฐ๊ฐ€ ์—†์œผ๋‹ˆ ์ด๋Œ€๋กœ ๋„˜์–ด๊ฐ€๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.

๋Œ“๊ธ€