๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ 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. ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•œ๋‹ค.
  2. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.
  3. ์กฐ๊ธˆ ์ˆ˜์ •ํ•œ๋‹ค.
  4. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.
  5. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์„ ํ•œ๋‹ค.

์ฃผ๊ธฐ์˜ 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์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์‚ฌํ•ญ๋“ค์€ ์ž ์‹œ ๋ฌด์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.
  • ์Šคํ… ๊ตฌํ˜„์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ปดํŒŒ์ผํ–ˆ๋‹ค.
  • ๋”์ฐํ•œ ์ฃ„์•…์„ ๋ฒ”ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œ์ผฐ๋‹ค.
  • ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์—์„œ ์ƒ์ˆ˜๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ์ผ๋ฐ˜ํ™”ํ–ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ํ• ์ผ๋“ค์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ํ• ์ผ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋‹ค.