๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ 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

๋Œ์•„์˜จ ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ํ‰๋“ฑ

์ง€๋‚œ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” Dollar์™€ Franc์„ ํ†ตํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ Dollar ํด๋ž˜์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Franc ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

์ผ„ํŠธ ๋ฒก ํ˜•๋‹˜์ด ๋ง์”€ํ•˜์‹œ๋Š” 1 ~ 4๋‹จ๊ณ„ ๊นŒ์ง€ ๋งค์šฐ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๋„์ฐฉํ–ˆ๋Š”๋ฐ, ๋ฌธ์ œ๊ฐ€ ์žˆ๋”๋ผ.

๋ฐ”๋กœ ์—„์ฒญ๋‚œ ์ค‘๋ณต.

๊ทธ๋ƒฅ ์ค‘๋ณต ๋ฉ์–ด๋ฆฌ์ด๋‹ค.

์ด ์ค‘๋ณต ๋ฉ์–ด๋ฆฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ƒ์†

๋ฐ”๋กœ ์ƒ์†์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค 2๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค.

class Dollar {
  private int amount;
  Dollar(int amount) {
    this.amount = amount;
  };

  public Dollar times(int multiplier) {
    return new Dollar(amount * multiplier);
  }

  public boolean equals(Object object) {
    Dollar dollar = (Dollar) object;
    return amount == dollar.amount;
  }
}
class Franc {
  private int amount;
  Franc(int amount) {
    this.amount = amount;
  };

  public Franc times(int multiplier) {
    return new Franc(amount * multiplier);
  }

  public boolean equals(Object object) {
    Franc franc = (Franc) object;
    return amount == franc.amount;
  }
}

์—์„œ


class Money {

}

class Dollar extends Money{
  private int amount;
  // ... ์ƒ๋žต
}
class Franc extends Money {
  private int amount;
  // ... ์ƒ๋žต
}

์ด์ œ amount ๋˜ํ•œ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.


class Money {
  protected int amount
}

class Dollar extends Money{
  // ... ์ƒ๋žต
}
class Franc extends Money {
  // ... ์ƒ๋žต
}

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ equals()๋ฅผ Money๋กœ ์˜ฎ๊ธฐ๋ฉด ์ค‘๋ณต์ด ์ผ๋‹จ ์‚ฌ๋ผ์ง„๋‹ค.

๋Œ“๊ธ€