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

์ˆœ์„œ

  1. ํ…Œ์ŠคํŠธ ํ•˜๋‚˜ ์ถ”๊ฐ€
  2. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ถ”๊ฐ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š”์ง€ ํ™•์ธ
  3. ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •
  4. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ์ถ”๊ฐ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธ

TDD์˜ ์ตœ์ข… ๋ชฉํ‘œ

Clean Code That Works
์ž‘๋™ํ•˜๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด TDD์˜ ๊ถ๊ทน์  ๋ชฉํ‘œ

ํ”„๋ผ์ด๋ฒ„์‹œ

์ง€๋‚œ ์ฝ”๋“œ์—์„œ๋Š”
equals ๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋™์น˜์„ฑ์„ ํ†ตํ•ด์„œ times() ์—ฐ์‚ฐ์„ ํ•œ ๊ฒฐ๊ณผ ๊ฐ์ฒด์™€ Dollar ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์Œ์„ ์ฆ๋ช…ํ–ˆ์—ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€์˜ ์ฝ”๋“œ๋ฅผ ์ ๊ฒ€ํ•ด๋ณด์ž.


public class Test {
  public void testMultiplication() {
    Dollar five = Dollar(5);
    Dollar product = five.times(2);
    assertEquals(10, product.amount);
    product = five.times(3);
    assertEquals(15, product.amount);
  }
}

class Dollar {
  int amount;
  Dollar(int amount) {
    this.amount = amount;
  };
  Dollar times(int multiplier){
    return new Dollar(amount * multiplier);
  }

  public boolean equals(Object object) {
    return amount == (Dollar) object;
  }

  @Test
  public void testEquality() {
    assertTrue(new Dollar(5).equals(new Dollar(5)));
    assertFalse(new Dollar(5).equals(new Dollar(10)));
  }
}

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ testMultiplication() ๋ฉ”์„œ๋“œ๋Š” ๋™์น˜์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ…Œ์ŠคํŠธํ•ด์•ผํ•  ๊ฒƒ์€ times() ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด Dollar ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€?๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ testMultiplication() ๋ฉ”์„œ๋“œ์—์„œ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๋‚ด์šฉ์„ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค.

public void testMultiplication() {
  Dollar five = Dollar(5);
  assertEquals(new Dollar(10), five.times(2));
  assertEquals(new Dollar(15), five.times(3));
}

์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ํ˜„์žฌ testMultiplication() ๋ฉ”์„œ๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

private

์ด์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Dollar ํด๋ž˜์Šค์˜ amount๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์€ ํด๋ž˜์Šค ๋‚ด๋ถ€๋ฐ–์— ์—†์œผ๋‹ˆ ๋ณ€์ˆ˜๋ฅผ private์œผ๋กœ ์„ค์ •ํ•˜์ž.

class Dollar {
  private int amount;

  Dollar(int amount) {
    this.amount = amount;
  };
  // ... ์ƒ๋žต
}

๋Œ“๊ธ€