TDD ์ง„ํ–‰ ์‹œ ์ƒ๊ธด ๋‘ ๊ฐ€์ง€ ์˜๋ฌธ์ 

364 views
Skip to first unread message

ChungHee Lee

unread,
Dec 6, 2009, 11:29:18โ€ฏPM12/6/09
to xp...@googlegroups.com
์•ˆ๋…•ํ•˜์„ธ์š”, ์ด์ถฉํฌ์ž…๋‹ˆ๋‹ค.
์ ์‹ฌ ๋ง›์žˆ๊ฒŒ ๋“œ์…จ๋‚˜์š”? ^^ย 
ย 
ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ TDD๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”,
TDD๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒ๊ธด ๋‘ ๊ฐ€์ง€ ํ˜„์ƒ์— ๋Œ€ํ•˜์—ฌ ๊ณต์œ ํ•˜๊ณ , ์˜๊ฒฌ์„ ๋‚˜๋ˆ„๊ณ  ์‹ถ์–ด์„œ ๋ฉ”์ผ์„ ์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ย 
1. ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋„๋ก ์ฝ”๋”ฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ...
ย 
์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์„ค๋ช…์„ ํ•ด ๋ณด๋ฉด...
ย 
์ข…์ „์—๋Š” ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ย 
class preTDD {
ย ย ย 
ย ย  private int isThisUsed;ย ย  // ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜
ย 
ย ย  public void methodToTest() {

ย ย ย ย ย ย  if( isThisUsed )ย // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ
ย ย ย ย ย ย ย ย  processA();
ย 
ย ย ย ย ย ย  ....
ย ย  }
ย 
ย ย  public void methodToTestCaller() {ย  // methodToTest ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ
ย ย ย ย ย  methodToTest();
ย ย  }
}
ย 
์ด์™€ ๊ฐ™์ด ํ•˜๋ฉด, isThisUsed ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ methodToTest()ย ๋ฉ”์†Œ๋“œ์˜ย ํ–‰๋™์ด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์—
methodToTest() ๋ฉ”์†Œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
ย 
๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋”ฉ์„ ํ•˜๊ฒŒ ๋˜๋”๊ตฐ์š”
ย 
class postTDD {
ย ย ย 
ย ย  private int isThisUsed;ย ย  //ย ์ด ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...๊ทธ๋ ‡์ง€๋งŒ...
ย 
ย ย  public void methodToTest(int isThisUsed) {

ย ย ย ย ย ย  if( isThisUsed )ย // ์–˜๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ, ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค.
ย ย ย ย ย ย ย ย  processA();
ย 
ย ย ย ย ย ย  ....
ย ย  }
ย 
ย ย ย  public void methodToTestCaller() {ย  // ํ˜ธ์ถœ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋€œ
ย ย ย ย ย  methodToTest(this.isThisUsed);
ย ย  }
}
ย 
๋ฉ”์†Œ๋“œ์˜ ๋™์ž‘์€ ๊ฐ™์•„์ง€์ง€๋งŒ,
ํ˜ธ์ถœํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
ย 
์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์žฅ/๋‹จ์ ์€
ย 
<์žฅ์ >
- ๋ฉ”์†Œ๋“œ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์ ์–ด์ง„๋‹ค.
- ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
<๋‹จ์ >
- ๋ถˆํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
ย 
์ •๋„์ž…๋‹ˆ๋‹ค.
TDD๋ฅผ ์ ์šฉํ•ด ๋ณด์…จ๋˜ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋– ์…จ๋‚˜์š”?
ย 
2. public ๋ฉ”์†Œ๋“œ์˜ ๋‚จ๋ฐœ(?)
ย 
์™ธ๋ถ€์—์„œ ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ๋Š” ๋ณดํ†ต private์œผ๋กœ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”...
ย 
public ๋ฉ”์†Œ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋‹ค ๋ณด๋‹ˆ
์œ ๋‹›ํ…Œ์ŠคํŠธ ํ•˜๋‚˜๋ฅผย ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•˜์—ฌ ์ž‘์—…ํ•˜๋Š” ์–‘์ด ๋งŽ์•„์ง€๋”๊ตฐ์š”
ย 
ํ•ด์„œ
๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ๋Š” ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์ด์ง€๋งŒ, ์˜ค์ง ์œ ๋‹›ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ public์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•œ ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ, ํด๋ž˜์Šค์˜ ๋Œ€๋ถ€๋ถ„์ด public ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ๋„ ๋งŽ์•˜๊ตฌ์š”
ย 
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ ๋‹›ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ์—๋Š” ํŽธํ•˜์ง€๋งŒ, ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›์น™์„ ๊นจ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.
ย 
๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ค ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผย ์ž‘์„ฑํ•˜๊ณ  ๊ณ„์‹œ๋Š”์ง€์š”?
ย 
ย 
ย 
ย 

๋ณ€์‹ ์ฒ 

unread,
Dec 6, 2009, 11:57:31โ€ฏPM12/6/09
to xper
1. ํ•จ์ˆ˜์˜ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง„๋‹ค๋ฉด ์ œ๋ฒ• ์ค‘์š”ํ•œ ๋ฉค๋ฒ„์ธ๊ฐ€ ๋ณด๊ตฐ์š”??
์ €๋Š” ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ if๋ฌธ ๋ณด๋‹ค state pattern์„ ์ด์šฉํ•ด์„œ if๋ฌธ ์ž์ฒด๋ฅผ ์—†์•  ๋ฒ„๋ฆฌ๊ณ 
ํ…Œ์ŠคํŠธ ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ข€๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ธ€์ฟ  ๋Œ€๊ฐœ์˜ ๊ฒฝ์šฐ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ ๋‹ค๋ฉด
๋ฆฌํŒฉํ† ๋ง์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค... ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ „๋žต์œผ๋กœ ์ˆ˜์ •์„ ํ•˜๋Š”๊ฑฐ์ง€์š”..

2. ์ผ€์ต์ฐ๊ธฐ ๋ชจ๋ธ๋กœ ๋ฐ”๊พธ์–ด ๋ณผ ํ•„์š”๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
private ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•˜์ง€๋งŒ
๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” public ๋ฉ”์†Œ๋“œ๋งŒ์„ ์œ„ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š”์ง€ ๊ณ ๋ฏผํ•ด ๋ณด๋ฉด ์ข‹๊ฒ ์ง€์š”...
๊น€๋ฐฅํ•ด์ฒดํ•˜๊ธฐ ๋ณด๋‹ค ๊น€๋ฐฅ์ฐ๊ธฐ๋ฅผ ํ•˜๋„๋ก ์• ๋ฅผ ์“ฐ๋ฉด private์„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ถ€๋ถ„์ด ์ค„์–ด ๋“ค๊ธฐ๋„ ํ•˜๊ฑฐ๋“ ์š”...

June Kim

unread,
Dec 7, 2009, 12:06:26โ€ฏAM12/7/09
to xp...@googlegroups.com
1, 2๋ฒˆ์ด ๊ฒฐ๊ตญ ๋น„์Šทํ•œ ์ด์•ผ๊ธฐ๋„ค์š”. FAQ์— ๋“ฑ์žฅํ•  ๋‹จ๊ณจ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.


1๋ฒˆ. TDD๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ์ฝ”๋“œ๊ฐ€ ์ „๋ฐ˜์ ์œผ๋กœ functional๋กœ ๊ฐ€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋Œ€๋ถ€๋ถ„ ๋ณ€์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋Š”
๋ฐฉ์‹์œผ๋กœ ํƒ„์ƒ์‹œํ‚จ ๋‹ค์Œ, ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ์—์„œ ๊ทธ ๋ณ€์ˆ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฉด(์ฆ‰, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฉ”์†Œ๋“œ๊ฐ„ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋ฉด), ๊ทธ ๋•Œ
๋ฆฌํŒฉํ† ๋ง์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ช‡๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์ฃ .

์‹ค์ œ ์ฝ”๋“œ ์˜ˆ(๋‹จ์ˆœํ™”๋œ ์˜ˆ๊ฐ€ ์•„๋‹ˆ๊ณ )๋ฅผ ๋ณด์—ฌ์ฃผ์‹œ๋ฉด ์ œ๊ฐ€ ๋น„์Šทํ•œ ๊ฒฝ์šฐ์— ์–ด๋–ป๊ฒŒ ํ–ˆ๋Š”์ง€ ๋ง์”€๋“œ๋ฆด ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

2๋ฒˆ. http://xper.org/wiki/xp/TestingPrivateInterfaces ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. 2004๋…„๋„์—
ํ•œ์ฐฝ ์ง„ํ–‰ํ–ˆ๋˜ ๋…ผ์˜์ž…๋‹ˆ๋‹ค.

2009/12/7 ChungHee Lee <dre...@gmail.com>:

Jake Kim

unread,
Dec 7, 2009, 1:18:46โ€ฏAM12/7/09
to xper
1๋ฒˆ์— ๋Œ€ํ•ด์„œ ์ œ ์ƒ๊ฐ์„ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ์ด์ถฉํฌ๋‹˜๊ป˜์„œ ๋‹จ์ ์œผ๋กœ ์ƒ๊ฐํ•˜์‹œ๋Š” ๋ถˆํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ์˜ ์ฆ๊ฐ€๋Š” ๋‹จ์ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™
์Šต๋‹ˆ๋‹ค. ์˜ˆ๋กœ ๋“œ์‹  ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด isThisUsed ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์€ ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์–ด๋Š ๊ณณ์—์„œ ๊ฒฐ์ •์„ ํ•˜๋Š
๋ƒ์— ๋Œ€ํ•œ ๋””์ž์ธ์ด ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฐ’์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žˆ๋Š”๊ฐ€ ์•„๋‹ˆ๋ฉด preTDD ์— ์žˆ๋Š”๊ฐ€ ํ•˜๋Š” ๋””์ž์ธ์ด ๋ฐ”๋€Œ
๋Š” ๊ฒƒ์ด์ฃ . ๋‹จ์ˆœํžˆ ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚œ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๊ณ  ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค. ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’์— ๋Œ€ํ•œ ์ฑ…์ž„์ด preTDD ์— ์žˆ๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ํŒŒ๋ผ
๋ฉ”ํ„ฐ๋กœ ๋นผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด ๋งž๊ณ  preTDD ํด๋ž˜์Šค๋Š” ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’๋งŒ ์‚ฌ์šฉ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฃผ์ž…์„ ํ•ด ์ฃผ๋Š” ๊ฒƒ
์ด ๋งž๊ฒ ์ฃ . ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle)์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ธ
๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ ๋งŽ์€ ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ์˜ ์ฆ๊ฐ€๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ์ข…์†์„ฑ์ด ๊ฐ์†Œ ํ•˜๋Š” ํ˜„์ƒ์„ ๊ฒฝํ—˜ํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

2๋ฒˆ์— ๋Œ€ํ•ด์„œ๋Š” ํ•ญ์ƒ ๋ง์ด ๋งŽ์€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฌํ•ด๋Š” private ์˜ ๊ฒฝ์šฐ public ์—์„œ ์‚ฌ์šฉ์ด ๋˜๋ฏ€๋กœ ๊ตณ์ด ํ…Œ์ŠคํŠธ๋ฅผ
์œ„ํ•ด public ์œผ๋กœ ์—ด ์ด์œ ๋Š” ์—†๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ๋ณดํ†ต private ์ด๋ผ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์˜ public ๋ฉ”์†Œ๋“œ์— ์ง€์›์„ ํ•ด์ฃผ๋Š”
helper ์˜ ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•˜๋ฏ€๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ๋…๋ฆฝ์ ์ธ ํ˜ธ์ถœ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๋ฉด
public ์œผ๋กœ ๊ฐœ๋ฐฉ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๊ฒ ์ฃ . ๊ทธ๋ž˜๋„ ๊ตณ์ด private ์„ ๋”ฐ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผ ๋งˆ์Œ์ด ๋†“์ด๊ฒ ๋‹ค ์‹ถ์œผ๋ฉด
reflection ์„ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์–ธ์–ด์ฐจ์›์—์„œ ์ง€์›์ด ๋˜์–ด์•ผ ๊ฒ ์ฃ .

Sangpil Byun

unread,
Dec 7, 2009, 9:10:49โ€ฏAM12/7/09
to xp...@googlegroups.com
์•ˆ๋…•ํ•˜์„ธ์š” ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋ฉ”์ผ์„ ์“ฐ๊ธฐ๋Š” ์ฒ˜์Œ์ด๋„ค์š”.
๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.^^
ย 
์ €๋„ TDD์— ๋Œ€ํ•ด์„  ์™„์ „ ์ดˆ์งœ ์ˆ˜์ค€์ด์ง€๋งŒ, ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ• ๋•Œ ํ•จ์ˆ˜๋Š” ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ์—†๋„๋ก(stateless) ํ•˜๋Š”๊ฒŒ ์•„๋ฌด๋ž˜๋„ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์„๊นŒ์š”? ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฐ’๋“ค์€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ์ •๋ณด์— ๋”ฐ๋ผ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋ฉด ์•„๋งˆ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋˜์ ธ์ฃผ๋Š”๊ฒŒ ์ฝ”๋“œ ์ฝ๊ธฐ๋„ ๋” ํŽธํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
ย 
๊ทธ๋ฆฌ๊ณ  2๋ฒˆ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ธ๋ฐ Java๋ฅผ ์“ฐ์‹ ๋‹ค๋ฉด default ์ œํ•œ์ž๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ƒฅ
ย 
ย void methodToTest(int isThisUsed) { ... }
ย 
์ด๋ ‡๊ฒŒ public, private, protected๋“ฑ ์“ฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ธ๋ฐ์š” ๋™์ผํ•œ ํŒจํ‚ค์ง€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ™์€ ํŒจํ‚ค์ง€ ์ƒ์— ์กด์žฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์ ‘๊ทผ์ž ์ž…๋‹ˆ๋‹ค.
ย 
์ €๋Š” public์œผ๋กœ ํ’€๋ ค์„  ์•ˆ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์œ„์˜ ์ ‘๊ทผ์ž๋กœ ํ…Œ์ŠคํŠธ ํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š”. ๊ทธ๋Ÿผ ์ฆ๊ฑฐ์šด ๋ฐค ๋˜์„ธ์š”~

2009/12/7 Jake Kim <drca...@gmail.com>

์†ํƒœ์›-ํ•ซ๋ฉ”์ผ

unread,
Dec 7, 2009, 7:27:53โ€ฏPM12/7/09
to xp...@googlegroups.com

์•„์‹œ์•„๋‚˜IDT ์†ํƒœ์›์ž…๋‹ˆ๋‹ค.

ย 

1.ย ย ย ย  ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์˜์กด์„ฑ ๋ฌธ์ œ

A.ย ย ย ย  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

B.ย ย ย ย ย  ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๋ถ€๋ณ€์ˆ˜ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์˜์กด์„ฑ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

C.ย ย ย ย ย  ๊ทธ๋ฆฌ๊ณ  ์–ธ์–ดํ™˜๊ฒฝ์ด ๋ฌด์—‡์ธ์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ, ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋ฅผ ์ œํ’ˆ ํด๋ž˜์Šค์— ๋„ฃ๋Š” ๊ฒƒ๋„ ์ด์ƒํ•˜๊ตฐ์š”. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉดโ€ฆ.

2.ย ย ย ย  Public ๋‚จ์šฉ ๋ฌธ์ œ

A.ย ย ย ย  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ „์— Private์˜€๋Š”๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด public์œผ๋กœ ์ „ํ™˜ํ–ˆ๋‹ค๋ฉด ํ™•์‹คํžˆ ๋ฌธ์ œ๋ผ๊ณ  ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.

B.ย ย ย ย ย  ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ํ–ฅ์ƒ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

C.ย ย ย ย ย  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋Š” ํ›ˆ๋ จ๋„ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ทผ๋ณธ์ ์œผ๋กœ ์ œํ’ˆ ์ฝ”๋“œ์˜ ์„ค๊ณ„๊ฐ€ ํ…Œ์ŠคํŠธ ์šฉ์ดํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.

D.ย ย ย ย  ๋”ฐ๋ผ์„œ ์ œํ’ˆ ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ์šฉ์ดํ•˜์ง€ ์•Š๋‹ค๋ฉด, ๋ฆฌํŒฉํ„ฐ๋ง์„ ์„ ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒ€ํ† ํ•ด๋ณด์‹œ๊ธฐ๋ฅผ ๊ถŒํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

E.ย ย ย ย ย  ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  ํ•จ์ˆ˜์™€ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

F.ย ย ย ย ย  ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ์˜๋ฏธ ์žˆ๋Š” Behavior์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ด๋‹ˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ ค๋Š”์ง€ ์‚ดํŽด๋ณด์•„์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

ย 

ย TDD ์‹ค์ „ ๊ฒฝํ—˜์€ ๊ทธ๋ฆฌ ๋งŽ์ง€ ์—†์ง€๋งŒ ํ•™์Šตํ•˜๊ณ  ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ผ ์˜๊ฒฌ์„ ํšŒ์‹ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ˜น์‹œ ์ž‘์„ฑํ•˜์‹  ๋Œ€์ƒ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹ค์ œ๋กœ ํ† ๋ก ์„ ํ•ด๋„ ๋œ๋‹ค๋ฉด ์ €๋กœ๋„์„œ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„์ƒฌ

unread,
Dec 7, 2009, 8:52:01โ€ฏPM12/7/09
to xp...@googlegroups.com
1. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ชฝ์ด ๋…๋ฆฝ์ ์ธ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ธฐ ์ข‹๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ์›๋ž˜์˜ ์งˆ๋ฌธ์— ๋‚˜์˜จ ์ฝ”๋“œ๋ฅผ ํŒŒ๊ณ ๋“ค์–ด ๊ธ‰์ง„์ ์œผ๋กœ ์งˆ๋ฌธํ•œ๋‹ค๋ฉด,

์ •๋ง๋กœ if ๋ถ„๊ธฐ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

2. ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์‹ค์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•˜๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

private ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ์ •๋ง๋กœ private์œผ๋กœ ๋งŒ๋“ค๋ ค๋Š” ์ด์œ ๋ฅผ ์ฐพ์•„

ํ•ด๋‹น ์ฑ…์ž„์„ ์ž‘์€ ํด๋ž˜์Šค ํ•˜๋‚˜์— ์œ„์ž„ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

TDD์—์„œ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹จ์œ„ ํ…Œ์ŠคํŒ…์„ ํ˜ผ๋™ํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ

์ €๋Š” ๋‘๊ฐ€์ง€๋ฅผ ๋ช…๋ฐฑํžˆ ๊ตฌ๋ถ„ํ•ด ์„ค๊ณ„ ๊ฐœ์„ ์— ๋„์›€์„ ์ฃผ๋Š” ๊ฒŒ ์œ ์šฉํ•œ ์ „๋žต์ด๋ผ๊ณ  ๋ด…๋‹ˆ๋‹ค.


2009๋…„ 12์›” 8์ผ ์˜ค์ „ 9:27, ์†ํƒœ์›-ํ•ซ๋ฉ”์ผ <ldst...@hotmail.com>๋‹˜์˜ ๋ง:

ChungHee Lee

unread,
Dec 7, 2009, 9:54:08โ€ฏPM12/7/09
to xp...@googlegroups.com
๋งŽ์€ ๋ถ„๋“ค์˜ ์กฐ์–ธ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค...(__)
privateย methodย test ๊ด€๋ จํ•ด์„œ ๋งŽ์€ ์ด์•ผ๊ธฐ๊ฐ€
์ด๋ฏธ 2004๋…„์— ์˜ค๊ฐ”๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ผ๊ธฐ๋„ ํ–ˆ๊ตฌ์š”...ย 
ย 
1. private ๋ฉ”์†Œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
ํด๋ž˜์Šค๋ฅผ ๋‚˜๋ˆˆ ํ›„, private ๋ฉ”์†Œ๋“œ๋ฅผย public์œผ๋กœ ์„ ์–ธํ•œ ํ›„์— ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.
ย 
์‚ฌ์‹ค ์ง€๊ธˆ ์„ค๊ณ„์—์„œ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋ชจ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ž˜์Šค ํฌ๊ธฐ๊ฐ€ ๊ทธ๋ฆฌ ํฌ์ง€๋Š” ์•Š์ง€๋งŒ, ์šฉ๋„๋ณ„๋กœ ์ชผ๊ฐœ์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š”.
์„ค๊ณ„ ์‹œ, private ๋ฉ”์†Œ๋“œ๋Š” ์ตœ์†Œํ™” ํ•ด์•ผ ๊ฒ ์Šต๋‹ˆ๋‹ค.
ย 
2. ์ฐฝ์ค€๋‹˜๊ป˜์„œ ์‹ค์ œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ ์˜ˆ๋ฅผ ๋ณด์—ฌ์ฃผ์‹œ๋ฉด ์กฐ์–ธ์„ ํ•ด ์ฃผ์‹œ๊ฒ ๋‹ค๊ณ  ํ•˜์…”์„œ...
์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋˜ ๋ฉ”์†Œ๋“œ๋งŒ์„ ๋ฐœ์ทŒํ•˜์—ฌ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
(๊ธฐํƒ€ ๋ฉ”์†Œ๋“œ ๋ฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์€ ์‚ญ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค.)
ย 
์ฝ”๋“œ ๊ด€๋ จํ•ด์„œ ํ•˜๋‚˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด,
isAlreadyDownloadedContent ๋ฉ”์†Œ๋“œ์˜ contentLength , downloadStartPosition ๊ฐ™์€ ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค์— ๋ฉค๋ฒ„๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜๋ผ์„œ
์• ์ดˆ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด ์ค€ ๊ฒƒ์ด๊ตฌ์š”...
ย 
์ฐฝ์ค€๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. (__)
ย 
3. ๋„ˆ๋ฌด ๋ฐ›๊ธฐ๋งŒ ํ•œ ๊ฒƒ ๊ฐ™์•„์„œ, ์ž๋ฃŒ๋ฅผ ์ฐพ๋‹ค๊ฐ€ ์–ป์€ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.(๋‹ค ์•„์‹œ๋Š” ๋‚ด์šฉ์ผ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ์š” ^^;)
ย 
http://xper.org/wiki/xp/TestingPrivateInterfacesย ๋‚ด์šฉ ์ค‘์— PrivilegedAccessor ๊ด€๋ จ ๋‚ด์šฉ์ด ์žˆ์–ด์„œ ์ž๋ฃŒ๋ฅผ ์ฐพ๋Š” ๋„์ค‘์—
๋‹ค์Œ ๋งํฌ๊ฐ€ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ย 
ย java.lang.class์˜ getDeclaredFields() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์„ ์–ธ๋œ ํ•„๋“œ์˜ ์ •๋ณด๋ฅผ ์•Œ์•„ ๋‚ด๊ณ (private ํฌํ•จ),
ย java.lang.class.Field ํด๋ž˜์Šค์˜ setAccessible ๋ฉ”์†Œ๋“œ(์‹ค์ œ๋กœ๋Š” AccessibleObject ์—์„œ ์ƒ์†๋œ ๊ฒƒ์ž„)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ private ๋ฉค๋ฒ„์˜ ๊ฐ’์„ ์–ป์–ด๋‚ด๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
ย ๋ฉค๋ฒ„ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฉ”์†Œ๋“œ์—๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™๊ตฌ์š”...
ย ์š”๊ฑธ ์‚ฌ์šฉํ•ด์„œ JUnit์—์„œ private ๋ฉค๋ฒ„(or ๋ฉ”์†Œ๋“œ) ํ…Œ์ŠคํŠธ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
ย 
ย (์ตœ์†Œํ•œ java์—์„œ๋Š”) private ํ‚ค์›Œ๋“œ๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ ,
ย ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ํ•ด์„œ private ๋ฉค๋ฒ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š๋‹ˆ, ์ฐจ๋ผ๋ฆฌ ์„ค๊ณ„๋ฅผ ๋ฐ”๊พธ๊ณ  ๋ง์ง€-_-;; ํ•˜๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
ย ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
ย ์ ์‹ฌ ๋ง›์žˆ๊ฒŒ ๋“œ์„ธ์š” ^^
2009๋…„ 12์›” 8์ผ ์˜ค์ „ 10:52, ์•„์ƒฌ <ahas...@gmail.com>๋‹˜์˜ ๋ง:
Downloader.java

์ฃผ๋„ฅ

unread,
Dec 8, 2009, 8:42:14โ€ฏPM12/8/09
to xper

์•ˆ๋…•ํ•˜์„ธ์š”.
์•„์ด๋””์Šค ํ—ˆ์ค€ํ˜์ž…๋‹ˆ๋‹ค.
์ตœ๊ทผ์— ์‹ค๋ฌด๊ฐ€ ๋ฐ”์˜๋‹ค ๋ณด๋‹ˆ mailing list ๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ณ  ์žˆ์ง€ ๋ชปํ•˜๋‹ค
์˜ค๋žซ๋งŒ์— ๊ธ€์„ ๋‚จ๊ธฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์ €๋Š” TDD๋ผ๊ธฐ ๋ณด๋‹ค ๊ธฐ์กด์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ ์ค‘์— UnitTest๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์„
๋งŽ์ด ํ•ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„์ƒ์˜ ์˜ณ๊ณ  ๊ทธ๋ฆ„์„ ๋– ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  UnitTest๋ฅผ ๋ถ™์ผ ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋‚ด๋ถ€๋ณ€์ˆ˜ ์‚ฌ์šฉ์˜ ๊ฒฝ์šฐ
Testํ•ด์•ผํ•  class๋ฅผ ์ƒ์†๋ฐ›์•„์„œ Mock class๋ฅผ ๋งŒ๋“ค๊ณ  Mock class ์—์„œ ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์…‹ํŒ…ํ•˜๋Š” ํ•จ
์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ ,
Mock Class๋ฅผ testํ•˜๋ฉด ๋˜๊ฒ ์ง€์š”. ๊ทธ๋Ÿผ ๊ธฐ์กด class์—๋Š” ์ „ํ˜€ ์†๋Œ€์ง€ ์•Š๊ณ  UnitTesting๊ฐ€๋Šฅํ•˜
๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2. Public method์˜ ๋‚จ๋ฐœ
Public์ด ์‹ซ์œผ์‹œ๋ฉด ๊ฐ€๊ธ‰์  protected๋กœ ์‚ฌ์šฉํ•˜์‹œ๊ณ  ์—ญ์‹œ Mock Class๋ฅผ ์ด์šฉํ•ด์„œ public ์ƒ์†
์„ ๋ฐ›์•„์„œ,
Mock Class๋ฅผ testํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  UnitTest๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์€
์ตœ๊ทผ์— ์ œ๊ฐ€ ์ด๋Ÿฐ๋ฅ˜์˜ ์ž‘์—…์„ ๋งŽ์ด ํ•˜๊ณ  ์žˆ์–ด์„œ ์ž…๋‹ˆ๋‹ค.

์ €ํฌ ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ ์ฒ˜์Œ๋ถ€ํ„ฐ TDD๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์•˜์œผ๋‚˜, ์žฌ์‚ฌ์šฉ์ด ์ƒ๋‹น๋ถ€๋ถ„ ๋˜์–ด
์ง€์†์ ์œผ๋กœ ์ˆ˜์ •๋˜๊ณ  ์žˆ๋Š” Legacy ์ฝ”๋“œ๋“ค์ด ๋งŽ๊ณ  ์ด๋Ÿฐ ์ชฝ์— ๋ฌธ์ œ์ ์ด ์ง€์† ๋ฐœ๊ฒฌ๋˜๋‹ค๋ณด๋‹ˆ,
UnitTest๋ฅผ ์ด๋ฏธ ์งœ์ ธ์žˆ๋Š” ์ฝ”๋“œ์— ๋งŽ์ด ๋„ฃ์„ ํ•„์š”์„ฑ์ด ์žˆ๋”๊ตฐ์š”.

๊ธฐ์กด ์ฝ”๋“œ์— ์†์„ ๋Œ€์ง€ ์•Š๊ณ  UnitTest๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด ์‰ฌ์šด ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋”๊ตฐ์š”.
ํŠนํžˆ ์•ž์„  ์˜ˆ์™€ ๊ฐ™์ด ๋‚ด๋ถ€ state๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” function๋“ค์€ ์‰ฝ๊ฒŒ UnitTest๊ฐ€ ๋ถ™์„ ์ˆ˜ ์žˆ์œผ๋‚˜,
๋‚ด๋ถ€ state๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŽ์ด ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ๋“ค์˜ ๊ฒฝ์šฐ๋Š” UnitTest ๋ถ™์ด๋Š” ๊ฒƒ์ด ์‰ฝ์ง€๋งŒ์€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  testableํ•˜๊ฒŒ refactoringํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ,
๊ธฐ์กด ์ฝ”๋“œ์— UnitTest๊ฐ€ ์ด๋ฏธ ๋งŽ์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด refactoring๋˜ํ•œ ๋‘๋ ค์›€์ด ์—†์–ด์ง€๋‚˜,
๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— refctoring๋˜ํ•œ side-effect์˜ ๋‘๋ ค์›€์œผ๋กœ ํ˜„์žฅ์—์„œ๋Š” ์‰ฝ์ง€๋งŒ์€ ์•Š์€ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•ด์„œ ์ฝ์–ด๋ณผ๋งŒํ•œ ์ฑ…์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
"Working Effectively With Legacy Code" by Michael C. Feathers from
PRENTICE HALL

์ฃผ๋„ฅ

unread,
Dec 8, 2009, 8:53:21โ€ฏPM12/8/09
to xper
>
> 2. Public method์˜ ๋‚จ๋ฐœ
> Public์ด ์‹ซ์œผ์‹œ๋ฉด ๊ฐ€๊ธ‰์  protected๋กœ ์‚ฌ์šฉํ•˜์‹œ๊ณ  ์—ญ์‹œ Mock Class๋ฅผ ์ด์šฉํ•ด์„œ public ์ƒ์†
> ์„ ๋ฐ›์•„์„œ,
> Mock Class๋ฅผ testํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
>

Public์˜ ๋‚จ๋ฐœ์˜ ๊ฒฝ์šฐ ๋Œ€์‹  protected๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
JAVA๊ฐ€ ์•„๋‹ˆ๋ผ C++ ๊ด€๋ จ์ž…๋‹ˆ๋‹ค๋งŒ,
GoogleTest์—์„œ๋Š” FRIEND_TEST() ๋ผ๋Š” macro๋ฅผ ์ง€์›ํ•ด์ค˜์„œ test case์— ๋Œ€ํ•œ
friend ship์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์˜ ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ UnitTest++ framework์„ ์‚ฌ์šฉํ•˜๋‹ค ์—ฌ๋Ÿฌ ์ด์  ๋•Œ๋ฌธ์— ์ตœ๊ทผ์— GoogleTest๋กœ ์˜ฎ๊ฒผํƒ“์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•œ python script์œผ๋กœ ๊ธฐ์กด UnitTest++ ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ GoogleTest๋กœ ์‰ฝ๊ฒŒ ์˜ฎ๊ฒจ์„œ,
์ƒ๊ฐ๋งŒํผ Framework ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์˜ overhead๋Š” ์ปค์ง€ ์•Š์€ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

June Kim

unread,
Dec 9, 2009, 11:53:58โ€ฏPM12/9/09
to xp...@googlegroups.com
์ฝ”๋“œ ์ž˜ ๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋ฉ”์†Œ๋“œ๋“ค๋งŒ ๋ณด๋‚ด์ฃผ์…”์„œ ์ „์ฒด์ ์ธ ํ‰๊ฐ€๊ฐ€ ์–ด๋ ต๋„ค์š”. ์ €๋Š” ์ „์ฒด์ ์ธ
๊ทธ๋ฆผ์„ ๋ณด๊ณ  ์‹ถ์—ˆ๊ฑฐ๋“ ์š”.

์—ฌํ•˜ํŠผ ์ง€๊ธˆ ๊ฐ–๊ณ  ์žˆ๋Š” ์ •๋ณด์—์„œ ๋ง์”€๋“œ๋ฆฌ๋ฉด,

์„ค๊ณ„๋ฅผ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ์ด ๋‚˜๋„ค์š”.
1) Downloader๋ฅผ ๋ช‡ ๊ฐœ์˜ class๋กœ ์ชผ๊ฐ ๋‹ค (coherentํ•œ ๋†ˆ๋“ค๋ผ๋ฆฌ ๋ฌถ์–ด์„œ -- ์ด ๊ฒฝ์šฐ ์ƒˆ๋กœ ์ƒ๊ธด
ํด๋ž˜์Šค๋“ค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•จ)
2) Downloader๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์‰ฝ๊ฒŒ "๊ฐ€๋ณ๊ฒŒ" ๋งŒ๋“ ๋‹ค. DI ์‚ฌ์šฉ. (์ด ๊ฒฝ์šฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ)

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ž‘ ๋ฉ”์†Œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ž‘ ๋‘˜ ๋‹ค ์ค‘๋ณต์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์€ ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Downloader๋ผ๋Š” ์ด๋ฆ„์— ๋Œ€ํ•ด. http://xper.org/wiki/seminar/OOP_c0_fb ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ์„ค๊ณ„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

2009/12/8 ChungHee Lee <dre...@gmail.com>:

ChungHee Lee

unread,
Dec 16, 2009, 1:01:54โ€ฏAM12/16/09
to xp...@googlegroups.com
๊น€์ฐฝ์ค€๋‹˜, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ^^
๊ฐ์‚ฌ์ธ์‚ฌ๋ฅผ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ๋“œ๋ ธ๋„ค์š”...
ย 
์œ„์˜ Downloader ๋ผ๋Š” ์ด๋ฆ„๊ณผย ๊ด€๋ จํ•ด์„œ ๋ณด๋‚ด ์ฃผ์‹  ๋งํฌ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด ๋ณด๊ณ  ์ฝ”๋“œ๋ฅผ ๋ดค๋”๋‹ˆ
-er ๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค๋ช…์ด ์ƒ๋‹นํžˆ ๋งŽ๋„ค์š”..
XXXParser, YYYParser, Downloader, ZZZManager ๋“ฑ๋“ฑ...
ย 
๋งํฌ์˜ ๊ธ€์„ ๋ณด๊ณ  ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ
ํ™•์‹คํžˆ -er ์ด ๋ถ™์œผ๋ฉด '๊ฐ์ฒด' ๋ผ๋Š” ์ƒ๊ฐ๋ณด๋‹ค๋Š” '๋ฌด์Šจ๋ฌด์Šจ ๊ธฐ๋Šฅ์„ ํ•ด ์ฃผ๋Š” ๋„๊ตฌ' ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ย 
์ดˆ๊ธฐํ™” ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋Š”๋ฐ,
์›๋ž˜๋Š” Initializer ๋ผ๊ณ  ๋งŒ๋“ค๋ ค๊ณ  ํ•˜์˜€์ง€๋งŒ, Initialization ์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
ย 
๊ทธ๋ฆฌ๊ณ  Initialization ํด๋ž˜์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๋”๋ผ๋„, ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ชผ๊ฐœ์–ด
๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋ฅผ test ํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
ย 
๋งŽ์€ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ํ•ด์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ^^
์ฆ๊ฑฐ์šด ์—ฐ๋ง ๋˜์„ธ์š”~
2009๋…„ 12์›” 10์ผ ์˜คํ›„ 1:53, June Kim <june...@gmail.com>๋‹˜์˜ ๋ง:
--~--~---------~--~----~------------~-------~--~----~
ํ•œ๊ตญ XP ์‚ฌ์šฉ์ž ๋ชจ์ž„(http://xper.org) ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๊ฐ€์ž…ํ•˜์…จ๊ธฐ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค. Google ๊ทธ๋ฃน์Šค "xper" ๊ทธ๋ฃน
์ด ๊ทธ๋ฃน์— ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.
xp...@googlegroups.com
์ด ๊ทธ๋ฃน์—์„œ ํƒˆํ‡ดํ•˜์‹œ๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.
xper+uns...@googlegroups.com
์ถ”๊ฐ€ ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด http://groups.google.com/group/xper?hl=ko?hl=ko์˜ ๊ทธ
๋ฃน์„ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค.
-~----------~----~----~----~------~----~------~--~---


Reply all
Reply to author
Forward
0 new messages