Nunit: XML ๋ฌธ์„œ ์ฃผ์„์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

์— ๋งŒ๋“  2017๋…„ 05์›” 29์ผ  ยท  43์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: nunit/nunit

(ํŽธ์ง‘: https://github.com/nunit/docs/wiki์˜ ๋งฅ๋ฝ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋ฐฉ์‹๊ณผ ๋งค์šฐ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ '์ฝ”๋”ฉ ํ‘œ์ค€'์„ '๋ชจ๋ฒ” ์‚ฌ๋ก€'๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค. /์ฝ”๋”ฉ-ํ‘œ์ค€.)

XML ๋ฌธ์„œ๊ฐ€ ์•ฝ๊ฐ„ ์ผ๊ด€์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฌธ์žฅ์—๋Š” ๋งˆ์นจํ‘œ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ๊ณ  ์ผ๋ถ€ ๋‹จ์ผ ๋ช…์‚ฌ์—๋Š” ํ˜•์šฉ์‚ฌ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๋งˆ์นจํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์žฅ์˜ ๋งˆ์นจํ‘œ๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ์ถœ๋ฐœ์ ์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ .NET BCL์˜ ์ „๋ฌธ์ ์ธ ์Šคํƒ€์ผ๋„ ํ‘œ์ค€๋„ ์•„๋‹™๋‹ˆ๋‹ค.

์„ค๋ช…์˜ ๊ธธ์ด์— ๊ด€๊ณ„์—†์ด ๋งˆ์นจํ‘œ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋ฐ ํˆฌํ‘œํ•˜๊ณ  ์–ด์ƒ‰ํ•ด ๋ณด์ด๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋งˆ์นจํ‘œ๋ฅผ ์ƒ๋žตํ•˜๋Š” ๋Œ€์‹  ๋ช‡ ๋‹จ์–ด๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์žฅ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฝ”๋”ฉ ํ‘œ์ค€ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€๋ฉดํ•˜๊ณ  ๋งค์šฐ ๊ฐ€์‹œ์ ์ž…๋‹ˆ๋‹ค. NUnit ์ „์ฒด์˜ ํ’ˆ์งˆ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ๊ฒฐ์ •ํ•˜๋“  https://github.com/nunit/docs/wiki/Coding-Standards ์ฝ”๋”ฉ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฌธ์„œ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/cc @nunit/framework-team


๋‹ค๋ฅธ XML ๋ฌธ์„œ ์ฝ”๋”ฉ ํ‘œ์ค€ ๋ชจ๋ฒ” ์‚ฌ๋ก€(์ดˆ์•ˆ)์— ๋Œ€ํ•œ ๋ฒ„ํ‚ท ๋ชฉ๋ก:

  • <paramref name="parameterName"/> , <see cref="TypeOrMember"/> ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด <see langword="null"/> ํ•˜์‹ญ์‹œ์˜ค.
    ์ด๊ฒƒ์€ ๊ฐœ์ฒด ๋ธŒ๋ผ์šฐ์ €์™€ ์ธํ…”๋ฆฌ์„ผ์Šค์— ๋งํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ธํ…”๋ฆฌ์„ผ์Šค๋ฅผ ์ฑ„์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฆ„๊ณผ ์˜ค๋ฒ„๋กœ๋“œ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๋ฏ€๋กœ ์•ˆ์‹ฌํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ ์œ ํ˜• ๋ฐ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด <summary> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ์œ ํ˜•๊ณผ ๊ตฌ์„ฑ์›์—๊ฒŒ ์‹ค์ œ๋กœ ์˜์‚ฌ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๊ฒŒ ๋˜๋ฉด <summary> ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ค‘๋ณต ๋ฌธ์„œ๋ฅผ ๋ฐฉ์ง€ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ด€๋ จ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

  • ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด <param> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๊ฒƒ์ด ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค(๋ฌด์—‡์ด ์•„๋‹ˆ๋ผ). ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์‹ค์ œ๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„์ด ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋ฎ๊ฒŒ ๋˜๋ฉด, ๊ณผ๋„ํ•œ ๋ฌธ์„œํ™”๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  <param> ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ <param> ์— ๊ด€๋ จ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

  • <remarks> ๋˜๋Š” <returns> ํƒœ๊ทธ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” ๋ชจ๋‘ <summary> ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IDE๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋ฉด ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ๋นˆ ํƒœ๊ทธ๋ฅผ ๋‚จ๊ฒจ๋‘์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ๋“ค์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ฑ„์šฐ์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ all-or-none <param> ํƒœ๊ทธ ์‹œํ–‰์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • <exception> ํƒœ๊ทธ๋กœ throw๋œ ์˜ˆ์™ธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”์„œ๋“œ ์„œ๋ช…์—์„œ ์ฆ‰์‹œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์†Œ๋น„์ž๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์Šฌํ”„๊ฒŒ๋„ intellisense๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ throw๋œ ์˜ˆ์™ธ ์œ ํ˜•๋งŒ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ์ค‘์š”ํ•œ ์˜ˆ์™ธ์˜ ๊ฒฝ์šฐ ์š”์•ฝ์—๋„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
    c# /// <summary> /// Does foo. If <see cref="OtherProperty"/> is not set, throws <see cref="InvalidOperationException"/>. /// </summary> /// <exception cref="InvalidOperationException">Thrown when <see cref="OtherProperty"/> is not set.</exception>

done design enhancement low

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ผ๊ด€์„ฑ์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๋งค์šฐ ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์ด๋ฉฐ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋” ๋‚˜์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋ฉฐ ๋„๊ตฌ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ <see cref="xxx"/> ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ญ์‹œ Colour ์•„๋‹ˆ๋ผ Color ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜

๋ชจ๋“  43 ๋Œ“๊ธ€

์ข‹์€ ์†Œ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‘ ํ‘œ์ค€์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜๋ชป๋œ xmldoc์ด ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค. (์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ)

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ณต๊ฐœ ์œ ํ˜•์œผ๋กœ ์ œํ•œํ•  ๊ณ„ํš์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@ChrisMaddock

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ณต๊ฐœ ์œ ํ˜•์œผ๋กœ ์ œํ•œํ•  ๊ณ„ํš์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ข‹์€ ์ง€์ . ๊ทธ๊ฒƒ์ด ๋™๊ธฐ์ด์ž ๊ฐ€์žฅ ์‹œ๊ธ‰ํ•œ ์ผ์ด์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ๋ก€๋ณ„๋กœ ๋‚ด๋ถ€ ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋„ ์ตœ์†Œํ•œ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PR ๊ฒ€ํ†  ์†๋„๋ฅผ ๋†’์ผ ๋•Œ ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์šฐ๋ฆฌ์˜ ์ฝ”๋”ฉ ํ‘œ์ค€์— ๋” ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ‘œ์ค€์€ ์ตœ์†Œํ•œ์ด์–ด์•ผ ํ•˜๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ธฐ๊บผ์ด ๋ถ€๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋งŒ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋„ˆ๋ฌด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ข…์ข… ํŒ€์—๊ฒŒ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ์ƒ์‚ฌ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž๊ธฐ ์ฃผ๋„์  ํŒ€์—์„œ ์ฝ”๋”ฉ ํ‘œ์ค€์€ ๋ฌผ๋ก  ๋ณด์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํŒ€์€ ๋ณด์Šค์ด๊ณ  ํŒ€์ด ์‹ค์ œ๋กœ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ฝ”๋”ฉ ํ‘œ์ค€์— __์•„๋ฌด๊ฒƒ๋„__ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์„ ๋„ฃ์ง€ ๋ง๊ณ  ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ํ•ญ๋ชฉ์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

๋ฌผ๋ก  ์ด ๋ชจ๋“  ๊ฒƒ์€ ํŠน์ •ํ•œ ๊ด€์ ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ 15๋ช…์€ ์ฝ”์น˜๋กœ ์—…๊ณ„์—์„œ 40๋…„ ๋™์•ˆ ํŒ€๊ณผ ํ˜‘๋ ฅํ•˜์—ฌ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ํฌํ•จํ•œ XP ์‚ฌ๋ก€๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ฝ” ๋‹จ์ถ•๋  ์ˆ˜ ์—†๋Š” ์ฝ”๋”ฉ ํ‘œ์ค€์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์•„๋ฌด๋„ ์ •๋ง๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ๋“ค์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ตœ์†Œํ•œ์œผ๋กœ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. IOW, ์ฝ”๋”ฉ ํ‘œ์ค€์— ๋งˆ์นจํ‘œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋งˆ์นจํ‘œ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ PR์„ ๊ฑฐ๋ถ€ํ•  ๊ณ„ํš์ž„์„ ์˜๋ฏธํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค.

@jnm2 ์—ฌ๊ธฐ์— ๋„ฃ์–ด์•ผ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹น์‹ ์˜ ์˜๋„์ž…๋‹ˆ๊นŒ?

๋˜ํ•œ XML ์ฃผ์„๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•„์š”ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ณต๊ฐœ ์œ ํ˜•์—๋Š” ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ์ง‘ํšŒ๊ฐ€ ๊ทธ๋ ‡์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค, NUnit์˜ ๊ณต๊ฐœ ์œ ํ˜•์— ๋Œ€ํ•œ ์—ฐ๋งˆ๋Š” ๋งˆ์นจํ‘œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  PR์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜คํƒ€ ์ˆ˜์ •์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋งŒํผ ์ „๋ฌธ์„ฑ์„ ์œ„ํ•ด ๊ฐœ์ธ์ ์œผ๋กœ ์ค‘์š”ํ•˜๋‹ค๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

์˜ˆ, ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ XML ๋ฌธ์„œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

@jnm2 ์ข‹์€ XML ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์š”์ ์ด ๋งˆ์Œ์—

@jnm2 ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™•์ธํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋”ฉ ํ‘œ์ค€์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค...

๋ชจ๋“  ๋ฌธ์žฅ ๋์— ๋งˆ์นจํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฝ”๋”ฉ ํ‘œ์ค€์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋‹น์‹ ์˜ ์กฐ์–ธ์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋ฐ›์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ 15๋…„ ๋™์•ˆ ์ฝ”์น˜๋กœ์„œ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๊ถŒ์œ„์˜ ์ˆ˜์ค€์ด๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋‚ด ์˜๊ฒฌ์„ ์กด์ค‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋‹น์‹ ์ด ๊ทธ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•  ๋•Œ ๋‹น์‹ ์—๊ฒŒ ๊ถŒ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์ฝ”๋”ฉ ํ‘œ์ค€์ด ์žˆ๋“  ์—†๋“  ๋˜‘๊ฐ™์ด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

OTOH, ์ฝ”๋”ฉ ํ‘œ์ค€์— ์žˆ๋Š” ๊ฒฝ์šฐ ๊ท€ํ•˜ ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งˆ์นจํ‘œ ์ถ”๊ฐ€๋ฅผ __์š”๊ตฌ__ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ‘œ์ค€์€ ์ œ์•ˆ์ด๋‚˜ ์ง€์นจ์ด ์•„๋‹ˆ๋ผ ์ƒ๋‹นํžˆ ์ž„์˜์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ช…๋ช… ๊ทœ์น™๊ณผ ๊ฐ™์ด ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ๊ฒƒ์— ํŠนํžˆ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ธฐ ์ฃผ๋„์  ํŒ€์—์„œ ์ฝ”๋”ฉ ํ‘œ์ค€์€ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์€ ์œ„์—์„œ ์ „ํ•ด์ง€๋Š” ๊ธฐ์—…์˜ ํ‘œ์ค€๊ณผ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ด๋””์—์„œ ์™”๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด, ์ž˜๋ชป๋œ ์ •๋ณด, ๋นˆ์•ฝํ•œ ๋ฌธ๋ฒ• ๋˜๋Š” ์ฒ ์ž๊ฐ€ ์—†๋Š” ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€์™€ ์ข‹์€ ๊ณต๊ฐœ XML ๋ฌธ์„œ๋Š” ๋ฒ„๊ทธ๋‚˜ ์—‰๋šฑํ•œ ์‹ค์ˆ˜๊ฐ€ ์—†๋Š” ์ข‹์€ ๊ตฌํ˜„๋ณด๋‹ค ๋‚ด ๊ด€์ ์—์„œ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งˆ์Šคํ„ฐ์— ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ์™€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๊ดœ์ฐฎ์€ ์ƒํƒœ๋กœ ์—ฌ๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๋นˆ์•ฝํ•œ XML ๋ฌธ์„œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์„ ๊ดœ์ฐฎ์€ ์ƒํƒœ๋กœ ์—ฌ๊ธฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋”ฉ ํ‘œ์ค€์— ๋Œ€ํ•ด ๋‹น์‹ ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ์ข‹์•„ํ•ด์„œ ๊ทธ ์ ์šฉ์— ๋Œ€ํ•ด ๋‹น์‹ ๊ณผ ๋™์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”๊ฐ€ ์˜ค๊ธฐ๋ฅผ ๊ณ„์† ๋ฐ”๋ผ๋Š” ๊ฒƒ์€ ์ •๋ง ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค! ๐Ÿ˜ƒ ์ด๊ฒƒ์€ XML ๋ฌธ์„œ(๋ฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€)๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“  ์ฝ”๋”ฉ ํ‘œ์ค€๊ณผ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ตฌํ˜„๊ณผ ๊ฑฐ์˜ ๋ณ„๊ฐœ์˜ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์˜ ๋ถˆ๋ณ€์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ „๋ฌธ์ ์ธ ์‚ฌ์šฉ์ž ๋Œ€๋ฉด XML ๋ฌธ์„œ์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆ๋ณ€์„ ์ ์šฉํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚ด ํˆฌํ‘œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ๊ณผ ๋‚˜๋จธ์ง€ ํŒ€์˜ ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ๋ฐ˜์‘์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. XML ๋ฌธ์„œ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์žฅ๊ธฐ์ ์ธ ๊ธฐ์ค€์ด ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ง‰๋Œ€๋Š” ์–ผ๋งˆ๋‚˜ ๋†’์„๊นŒ? ์šฐ๋ฆฌ๋Š” ์žฅ๊ธฐ ๋ฐ”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋จธ๋ฌด๋ฅด๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๊นŒ?

์ข‹์€ XML ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๊ท€ํ•˜์˜ ๋ชจ๋“  ์š”์ ์ด ๋งˆ์Œ์— ๋“ ๋‹ค๊ณ  ๋จผ์ € ๋งํ–ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ํ•„์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์ง‘ํ•ฉ ์ธ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ๋งํ–ˆ๊ณ  ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ง‘์ค‘ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋” ์š”์ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์—ฌ์ž๋Š” ๋”ฐ๋ผ์•ผ ํ•  ํ‘œ์ค€์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•œ๋‹ค, ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฆ๊ฑฐ๋ฅผ ๋ณธ๋‹ค. ๊ทธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋”ฉ ํ‘œ์ค€๊ณผ ์ฃผ๋ณ€ ํŒŒ์ผ์„ ๋ณด๊ณ  ์ง„ํ–‰ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ฝ”๋”ฉ ํ‘œ์ค€์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š๋”๋ผ๋„ ๊ธฐ์—ฌ์ž์˜ ์žฌ๋Ÿ‰์— ๋”ฐ๋ผ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jnm2

"์ž˜๋ชป๋œ ์ •๋ณด, ๋นˆ์•ฝํ•œ ๋ฌธ๋ฒ• ๋˜๋Š” ๋งž์ถค๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ํ›Œ๋ฅญํ•œ ๊ณต๊ฐœ XML ๋ฌธ์„œ์™€ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋Š” ๋‚ด ๊ด€์ ์—์„œ ๋ฒ„๊ทธ๋‚˜ ๊ณผ๋„ํ•œ ์กฐ์žกํ•จ์ด ์—†๋Š” ์ข‹์€ ๊ตฌํ˜„๋ณด๋‹ค ๋œ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ์ƒํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋งˆ์Šคํ„ฐ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ XML ๋ฌธ์„œ๊ฐ€ ์ข‹์ง€ ์•Š์€ ๊ฒƒ์€ ๊ดœ์ฐฎ์€ ์ƒํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."

<chiding>
๋ฏธ์•ˆํ•˜์ง€๋งŒ ๊ทธ์ชฝ์œผ๋กœ ์ „ํ™”ํ•ด์•ผ๊ฒ ์–ด. ๋‹น์‹ ๊ณผ ์˜๊ฒฌ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋‹น์‹ ์˜ ํ›Œ๋ฅญํ•œ ์†œ์”จ ๊ฐ€์น˜๋ฅผ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ์ด ์ œ๊ฐ€ ํ‘œ์ค€์— ๋Œ€ํ•ด ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "๋ฌธ์„œ์—๋Š” ์ฒ ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋‹จ์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•จ"์ด๋ผ๋Š” ํ‘œ์ค€์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ฐฑํ•œ ๋‚ด์šฉ์„ ๋งํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋™๋ฃŒ ํŒ€์›์„ ๋ชจ์š•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ๋งŽ์€ ํšŒ์‚ฌ์—์„œ ๋ฐœ๊ฒฌํ•œ ๋ฐ”๋กœ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ๋Š” ๋ณ„๋„์˜ ์กฐ์ง์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋”ฐ๋ผ์•ผ ํ•  ์ •์ฑ…๊ณผ ์ ˆ์ฐจ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. "C# ํ”„๋กœ๊ทธ๋žจ์€ ์ ์ ˆํ•˜๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๊ณ  ์กฐ์ง์˜ ์ข‹์€ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค"๋Š” ํ‘œ์ค€์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ XML ๋ฌธ์„œ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ํ‘œ์ค€์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์˜๊ฒฌ ๋ถˆ์ผ์น˜๋Š” ๋ฌธ์„œ๋‚˜ ๋ฌธ์„œ์˜ ๊ฐ€์น˜ ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ์†œ์”จ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ฝ”๋”ฉ ํ‘œ์ค€์˜ ์„ฑ๊ฒฉ๊ณผ ๋ชฉ์ ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ๊ณผ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์ด ๋‹น์‹ ๋ณด๋‹ค ํ›Œ๋ฅญํ•œ ๊ธฐ์ˆ ์„ ๋” ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธฐ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ ์ตœ์•…์˜ ์ข…๋ฅ˜์˜ ์ธ๊ฐ„์ ์ธ ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค.
</chiding>

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

"์ฝ”๋”ฉ ํ‘œ์ค€"(๋Œ€๋ฌธ์ž)์ด๋ผ๋Š” ์šฉ์–ด๋Š” XP ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๋ฏผ์ฒฉํ•˜๊ณ  ํ™•์‹คํžˆ ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์ด ์ฝ”๋”ฉ ํ‘œ์ค€์˜ ๋ชฉ์ ์œผ๋กœ ์ œ์•ˆ๋œ ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” __์•„๋‹™๋‹ˆ๋‹ค__. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝ”๋”ฉ ํ‘œ์ค€์€ XP๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋กœ ์ œ๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ (๋‚ด ์ƒ๊ฐ์—๋Š”) "XML ๋ฌธ์„œ์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€"์— ๋” ๊ฐ€๊น์ง€๋งŒ ์ฝ”๋”ฉ ํ‘œ์ค€์€ (๋‚ด ์ •์˜์— ๋”ฐ๋ฅด๋ฉด) "์ตœ์†Œํ•œ์˜ ๊ด€ํ–‰"์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ์ตœ์†Œํ•œ์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด NUnit์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ๋Œ€๋ถ€๋ถ„์€ ์ผ๋ฐ˜ ๊ธฐ์—ฌ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋ชจ๋‘ ๋”ฐ๋ฅด์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ๋ณด๋‚ด๋ฉด ๋‹ค์‹œ ๋Œ์•„์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ์—ฌ์ž๊ฐ€ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. OTOH, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋“ค์˜ ์ž‘์—…์„ ๋ฐ›์•„๋“ค์ด๊ณ  ๊ทธ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๊ณ  ๋‹ค์Œ์— ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์„ ์œ ์ง€ํ•  ๋” ๋‚˜์€ ๊ธฐํšŒ๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. __๋งŒ์•ฝ ๋‹น์‹ ์˜ ์•„์ด๋””์–ด๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ›Œ๋ฅญํ•˜๋‹ค๋ฉด, ๊ทธ ๋ฐฐํ›„์— "๋ฒ•์ " ๊ถŒ์œ„์˜ ํž˜์ด ์™œ ํ•„์š”ํ•œ๊ฐ€์š”? ๐Ÿ˜ธ ๊ฐœ์ธ์ ์œผ๋กœ ๋‹น์‹ ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฐ€์žฅ ๋†’์€ ๊ธฐ์ค€์€ ๋‘ ๋ช…์˜ ์ปค๋ฏธํ„ฐ๊ฐ€ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ์–ด๋–ค ๊ฒƒ๋„ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์‹œํ–‰์ด ์•„๋‹ˆ๋ผ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ๊ณผ ์˜๊ฒฌ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋‹น์‹ ์˜ ํ›Œ๋ฅญํ•œ ์†œ์”จ ๊ฐ€์น˜๋ฅผ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์˜๋„ํ•œ ์˜๋ฏธ๋Š” ์ „ํ˜€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ๋ฐฐ์šฐ๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์†Œ๋น„์ž ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  XML ๋ฌธ์„œ ๋ฌธ์žฅ์— ๋ ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š” ์œ„์น˜์— ์žˆ๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ๋ฐ ๋ชจ๋‘ ๋™์˜ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ ์œ„์น˜์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • PR์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ์Šค์Šค๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ๊ฒฝ๊ณ ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๊ณ ์ž์˜ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋˜๊ณ  ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  • ์Šคํƒ€์ผ์ด๋‚˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  _๋ˆ„๊ตฐ๊ฐ€_ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ถœ์‹œํ•  ์˜์‚ฌ๊ฐ€ ์—†๋‹ค๋ฉด ์ฝ”๋”ฉ ํ‘œ์ค€์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๊ณ ์ž๊ฐ€ ์ง€์นจ์„ ์ฐพ๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PR์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํŽธ์•ˆํ•˜๋‹ค๊ณ  ๋Š๋ผ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋†’์€ ํ’ˆ์งˆ์˜ XML ๋ฌธ์„œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌป๋Š”๋‹ค๋ฉด ๋‚ด๊ฐ€ ๊ฐ„๊ณผํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด์ œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋ชจ๋‘ ๋”ฐ๋ฅด์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ๋ณด๋‚ด๋ฉด ๋‹ค์‹œ ๋Œ์•„์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ์—ฌ์ž๊ฐ€ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” PR์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ๊ตฌ์ƒํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์„ ๋ฉ€๋ฆฌ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ๋ณด์ž…๋‹ˆ๊นŒ?

์•„๋งˆ๋„ ์šฐ๋ฆฌ์˜ ์ฝ”๋”ฉ ํ‘œ์ค€์ด ํ˜„์žฌ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์™€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด์— ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋น ๋ฅด๊ฒŒ ํ›‘์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—๋Š” ์ œ๊ฐ€ ์•Œ์ง€ ๋ชปํ–ˆ๊ณ  ๊ฒ€ํ† ์—์„œ ์‹œํ–‰ํ•˜์ง€๋„ ์•Š์•˜์„, ์‹ฌ์ง€์–ด ์ œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜์ง€๋„ ์•Š์•˜์„ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜„

๋‚ด ์ƒ๊ฐ:

  • xmldoc ํ˜•์‹ ์ง€์นจ์„ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ๋Š” ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๋ฌธ์„œ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค!

    • ๋‚˜๋Š” ๋˜ํ•œ PR์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋งˆ์นจํ‘œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ๋žŒ๋“ค์„ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๊ฒฝ๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ๋ ‡๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (Cake) - ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ์ถฉ๋ถ„ํžˆ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • ๋˜ํ•œ ๊ธฐ์กด xmldoc์ด ์ข€ ๋” ํ‘œ์ค€ํ™”๋˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๊ด€์Šต์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๊ณ  ์œ„์˜ ์‚ฌํ•ญ์ด ๊ทธ๋ ‡๊ฒŒ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ PR์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋งˆ์นจํ‘œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ๋žŒ๋“ค์„ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๊ฒฝ๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๊ณ ์ž๊ฐ€ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ํ†ตํ•ด ๋˜๋Š” ์ฃผ๋ณ€ ํŒŒ์ผ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋ณด๊ณ  ์˜คํƒ€์™€ ๊ฐ™์€ ๊ด€์ ์—์„œ ์ด๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค๋ฉด ์ˆ˜์ •ํ•˜๋ ค๋Š” ์—ด์˜๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„๋ณด๊ณ  ๊ทธ๊ฒƒ์„ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

@CharliePoole์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ ์„์ˆ˜๋ก ์ข‹๋‹ค!

์ €๋Š” ์‚ฌ์‹ค ๊ธฐ๊ฐ„์ œ๋ฅผ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌผ๊ฑด์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. xml ์ฃผ์„์— ๋งˆ์นจํ‘œ๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์•„๋ฌด๋„ ๋ถˆํ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @oznetmaster.

์šฐ๋ฆฌ๋Š”:

  • ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ(๋ฌธ์žฅ์— ๋งˆ์นจํ‘œ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ๐Ÿ˜ˆ)
  • NUnit์ด XML ๋ฌธ์„œ์—์„œ ํ˜ผํ•ฉ๋œ ์Šคํƒ€์ผ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์€์ง€ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค(๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
  • ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์›ํ•˜๋Š”์ง€ ๊ฒฐ์ •

@jnm2 ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” __๋งŒ__ ๋‹น์‹ ์˜ ์›๋ž˜ ์ œ์•ˆ์—์„œ __๋‘__ ๋‹จ์–ด์— ๋™์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค: "์ฝ”๋”ฉ ํ‘œ์ค€." ๋‚˜๋Š” ์‚ฌ์‹ค ๋‹ค๋ฅธ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ด ๋…ผ์˜๋ฅผ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ฒ˜์Œ์— "๊ณ ๋ง™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ‘œ์ค€๋ณด๋‹ค "XML ๋ฌธ์„œ ์ฃผ์„์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€"์™€ ๊ฐ™์€ ์ง€์นจ ๋ฌธ์„œ๋กœ ๋” ๋‚˜์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋” ๋นจ๋ฆฌ ํ•ด๊ฒฐํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. .

์š”์•ฝ: ๋‚ด ๋ฐฐ๊ฒฝ, ์ตœ์†Œํ•œ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๋ถ€๋ถ„์€ XP ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. XP์—์„œ "Coding Standard"๋Š” ํŠน์ •ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ ๊ท€ํ•˜์—๊ฒŒ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋…ผ์Ÿํ•˜๋Š” ๋ฐ ๋ชจ๋“  ์‹œ๊ฐ„์„ ๋ณด๋‚ด์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค์†Œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ๋“ค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ์ค‘๊ด„ํ˜ธ ๋ฐฐ์น˜, ๋ฉค๋ฒ„ ํ•„๋“œ์— ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋“ฑ

๋‚ด๊ฐ€ ์กด๊ฒฝํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ „๋ฌธ๊ฐ€๋“ค์€ ์ฝ”๋”ฉ ํ‘œ์ค€์— ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋„ฃ์ง€ __ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค__ ๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ํŒ€์ด ์ž์ฒด ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ์— "์ตœ์ƒ์˜"(๋˜๋Š” ์•„์ฃผ ์ข‹์€) ๊ด€ํ–‰์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์™„์ „ํžˆ ์„ ํƒํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. "์ •์ฑ…๊ณผ ์ ˆ์ฐจ์— ๋Œ€ํ•œ ์‹ ๋ขฐ"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด ๋ฐฐ๊ฒฝ์ผ ๋ฟ์ด๊ณ  ์•„๋งˆ๋„ ๋‹น์‹ ์˜ ๋ฐฐ๊ฒฝ์€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ์ด ํ”„๋กœ์ ํŠธ์— ์ œ ๊ฐœ์ธ์ ์ธ ์‹ ๋…์„ ์ ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋จธ์ง€ ์•Š์•„ ๋” ์ด์ƒ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ชจ๋ธ์„ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ผ์„ ์šด์˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ๋” ๋งŽ์€ ์ •์ฑ…๊ณผ ์ ˆ์ฐจ๋ฅผ ์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” __์•„๋‹™๋‹ˆ๋‹ค__. ์—ฌ๋Ÿฌ ์˜๊ฒฌ์ด ์žˆ์„ ๋•Œ ์งˆ๋ฌธ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ง€ ๋‹ค๋ฅธ ๊ฒƒ์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ‘œ์ค€(Coding Standard)์ด๋ผ๊ณ  ํ•˜๋ฉด ์ ˆ๋Œ€์ ์œผ๋กœ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ, ์ฆ‰ ํŒ๋‹จ์ด ์—†๋‹ค๋Š” ๋ง์„ ๋“ฃ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํŒ๋‹จ๋ ฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ __์›__ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ™”ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋˜๋Š” ๊ถŒ์žฅ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฅผ ๋”ฐ๋ผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ์ฝ”๋“œ์— ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋“ค์ด ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋กœ ์ผ์„ ํ•จ์œผ๋กœ์จ "์Šน๋ฆฌ"ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค์—์„œ๋„ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ xml ์ฃผ์„์˜ ์š”์†Œ๋Š” ๋‹จ์ผ "๋ฌธ์žฅ"์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ "๋ฌธ์žฅ"์— para ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@jnm2 ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•ด์•ผ ํ•  ์ผ์€ XML ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๋ฏธ ์œ„์˜ ๋Œ“๊ธ€์—์„œ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์—๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์š”์ ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๊ณ  ์ฝ”๋”ฉ ๋ฐ ๋””์ž์ธ์˜ ์ข‹์€ ์›์น™์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋ฅผ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xml ๋ฌธ์„œ์— ๋Œ€ํ•œ "๋ชจ๋ฒ” ์‚ฌ๋ก€"๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋Š” ์‹œ๋„์กฐ์ฐจ ๋ฏธ๋„๋Ÿฌ์šด ๊ฒฝ์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰์‹œ "์–ด๋–ค ์˜์–ด์— ๋Œ€ํ•ด ๋งž์ถค๋ฒ•์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๊นŒ?"์™€ ๊ฐ™์€ ์งˆ๋ฌธ์ด ์ œ๊ธฐ๋ฉ๋‹ˆ๊นŒ? ์ˆซ์ž์™€ ๋ชฉ๋ก ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์— ์–ด๋–ค ๋ฌธํ™”๊ถŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๋งˆ์นจํ‘œ ๋’ค์— ํ•œ ์นธ ๋˜๋Š” ๋‘ ์นธ(๋งˆ์นจํ‘œ๋ฅผ ํ—ˆ์šฉ/์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ).

๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ฆฌ์˜ ๊ด€์‹ฌ์„ ์ง‘์ค‘ํ•ด์•ผ ํ•  ๊ณณ์—์„œ ์•ฝ๊ฐ„ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์„œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฝ”๋”ฉ ํ‘œ์ค€ ๋˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@CharliePoole ์ข‹์•„, ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@oznetmaster ์ ์–ด๋„ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์ด XML ๋ฌธ์„œ์˜ ๋ฒ”์œ„๋ฅผ

๋‚˜๋Š” ๊ทธ๋“ค์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ด์œ ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ฌธ์žฅ์˜ ๊ตฌ๋‘์ ๋งŒํผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

"์ƒ‰์ƒ"์€ ๋ฌธ์„œ์˜ ์ƒ‰์ƒ ๋˜๋Š” ์ƒ‰์ƒ์œผ๋กœ ํ‘œ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์‰ผํ‘œ ๋˜๋Š” ๋งˆ์นจํ‘œ์ž…๋‹ˆ๊นŒ? ์†Œ์ˆ˜์  ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก "a, b, c, d"๋Š” ๋…์ผ์—์„œ "a; b; c; d"๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

NUnit ์‚ฌ์šฉ์ž๊ฐ€ NUnit์„ ๊ฐ€์žฅ ์ž์ฃผ "๋ณด๋Š”" ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ณต๊ฐœ ์ธก๋ฉด์— ๋Œ€ํ•œ xml ๋ฌธ์„œ๊ฐ€ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ „์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ๊ด€์„ฑ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

@oznetmaster ๋‚˜๋Š” ๋‹น์‹ ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๊ฑฐ๊ธฐ์—์„œ ๊ฐ€์ž๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
'์ƒ‰์ƒ'๊ณผ '์ƒ‰์ƒ'์ด ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ ํŒ€์€ ํ™•์‹คํžˆ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ '์ƒ‰์ƒ' ๋Œ€ '์ƒ‰์ƒ'์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์˜ ์ƒ๊ฐ์„ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋Œ€ํ™” ์—†์ด ๋ ํ‘œ์‹œ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@jnm2 ์ƒ๋‹นํžˆ ๊ทผ์‹œ์•ˆ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ "๋ชจ๋ฒ” ์‚ฌ๋ก€"?

๋‹ค์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” "๋ชจ๋ฒ” ์‚ฌ๋ก€"๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ผ๊ด€์„ฑ์ด ์—ฌ๊ธฐ์„œ ์ถ”๊ตฌ๋˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚˜๋Š” ๋ชจ๋“  xml ์ฃผ์„์ด ์†Œ๋ฌธ์ž๋กœ ๋œ ํ•œ ํšŒ์‚ฌ์—์„œ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋Œ€๋ฌธ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘๊ณผ ๋ ๋ฌธ์ œ๋ฅผ ๊ฒ€ํ† ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

Microsoft๋Š” https://docs.microsoft.com/en-us/dotnet/csharp/codedoc์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ ํŠน๋ณ„ํžˆ:

Documenting code is recommended for many reasons. What follows are some best practices, general use case scenarios, and things that you should know when using XML documentation tags in your C# code.

-     For the sake of consistency, all publicly visible types and their members should be documented. If you must do it, do it all.
-     Private members can also be documented using XML comments. However, this exposes the inner (potentially confidential) workings of your library.
-     At a bare minimum, types and their members should have a <summary> tag because its content is needed for IntelliSense.
-     Documentation text should be written using complete sentences ending with full stops.
-     Partial classes are fully supported, and documentation information will be concatenated into a single entry for that type.
-     The compiler verifies the syntax of the <exception>, <include>, <param>, <see>, <seealso> and <typeparam> tags.
-     The compiler validates the parameters that contain file paths and references to other parts of the code.
- 

NUnit XML ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ์ด๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์ด ๋ฌธ์ œ์— ๋” ์ด์ƒ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@nunit/framework-team ์ข‹์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋…ผ์˜ํ•˜๊ณ  ์‹ถ์€ 7๊ฐ€์ง€ ์ง€์นจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://gist.github.com/jnm2/3f230c9f6343d60bb542938dc35e7a96

Q1: ๋‹ค์Œ ์ค‘ NUnit Framework ์ œํ’ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Q2: ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ์™ธ์—๋„ PR์ด ์ด๋Ÿฌํ•œ ์ง€์นจ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‚˜์ค‘์— ๊ณต๊ฐœ XML ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์ˆ˜์ •์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” PR์ด๋‚˜ PR์˜ ์ˆ˜์šฉ์— ์˜ํ–ฅ์„ ์ฃผ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค!

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์œ„์˜ ๋งํฌ์—์„œ Microsoft๊ฐ€ ๋ฌธ์„œํ™”ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋„๋ฆฌ ๋ฐฐํฌ๋˜๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” "๋ชจ๋ฒ” ์‚ฌ๋ก€"๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@jnm2

์†Œ๊ฐœ ๋‹จ๋ฝ: ์ด ๋ฒ”์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•˜์‹ญ์‹œ์˜ค. ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ณต์šฉ ๋ฉ”์„œ๋“œ์— xml ๋ฌธ์„œ๊ฐ€ ํ•„์š”ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ engine.api ์–ด์…ˆ๋ธ”๋ฆฌ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด...

์—ฐ์Šต 1: ๋ชจ๋“  ๋ฌธ์žฅ์— ๋งˆ์นจํ‘œ(๋งˆ์นจํ‘œ ์•„๋‹˜)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์‹ค์Šต 2: ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•„๊ปด์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด string์ด๋‚˜ int์— ๋Œ€ํ•œ ref๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฐ์Šต 3: public์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  add:๋ฅผ ์ œ๊ฑฐํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ๋งํ•œ ๊ณณ.

์—ฐ์Šต 4: ๋ช…๋ฐฑํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ . ํŠนํžˆ ์†์„ฑ์— ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์—ฐ์Šต 5: ์˜ˆ

์—ฐ์Šต 6: ์˜ˆ

์—ฐ์Šต 7: ์•„๋ผ์‹ญ์‹œ์˜ค. ์ผ๋ถ€ ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๋‚˜์—ดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. (1) ์ •๋ณด๋ฅผ ๋‘ ๋ฒˆ ๋‚˜์—ดํ•˜๊ณ  (2) ๋ชจ๋‘๊ฐ€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต .NET ์˜ˆ์™ธ์— ๋Œ€ํ•ด cref๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์žˆ๋Š” ์˜ˆ์ œ๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ์ž์‹ ์˜ ๋ฌผ๊ฑด์„ ์ข‹์•„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด...

๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์˜ˆ, ์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” ์–ด์จŒ๋“  ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ์šฐ๋ฆฌ์˜ ํŒ๋‹จ์— ๋”ฐ๋ผ ๋ฌผ๊ฑด์„ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ณผ ๋•Œ ์–ด๋–ค ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ ๋ณด์ผ์ง€ ๋ฏธ๋ฆฌ ๋งํ•  ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ๋ฏธ๋ฃจ๋„๋ก ํ•ฉ์‹œ๋‹ค.

๋‚˜๋Š” ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ฒƒ ์ด์ƒ์˜ ์ผ์น˜์™€ ์ผ๊ด€์„ฑ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํŠน๋ณ„ํ•œ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ์ž๋Š” ํ›ˆ๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ด๋ฉฐ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@oznetmaster ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๊ฐ€์ด๋“œ๋ผ์ธ์—๋Š” 7๊ฐ€์ง€ ํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋Œ“๊ธ€...

  1. "์ผ๊ด€์„ฑ์„ ์œ„ํ•ด..." ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๋ฌธ์„œํ™”ํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์žฅ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

2, 3, 4. ์ง€์นจ์œผ๋กœ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค.

5, 6, 7. ์„ค๋ช…์„œ ์ง€์นจ์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

2, 3, 4๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ €์—๊ฒŒ ์ ํ•ฉํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๊ทธ๋Ÿฐ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๋ผ์ง€๋Š” ์•Š์ง€๋งŒ @jnm2 ๊ฐ€ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๊ณ  ๊ธฐ๊บผ์ด ์ž‘์—…ํ•  ์˜ํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฐ€ ๋ถ€๋‹ด ์—†์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๊ฒ€ํ† ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ˆ„๊ตฌ๋‚˜ ์–ธ์ œ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ž์œ ๋กญ๊ฒŒ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ๋ฌธ์„œ์˜ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทœ์น™์„ ๋งŒ๋“ค๊ณ  ์‹œํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋ฏธ๋ž˜์— ์•Œ๋ฆผ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ์‚ฌํ•ญ๋งŒ ๊ธฐ๋กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@CharliePoole ์€ ์ €์—๊ฒŒ

์ด๊ฒƒ์€ ๊ณต๊ฐœ ์œ ํ˜•์œผ๋กœ๋งŒ ์ œํ•œํ•˜์—ฌ ๋‚˜์—๊ฒŒ ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

์ผ๊ด€์„ฑ์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๋งค์šฐ ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์ด๋ฉฐ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋” ๋‚˜์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋ฉฐ ๋„๊ตฌ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ <see cref="xxx"/> ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ญ์‹œ Colour ์•„๋‹ˆ๋ผ Color ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜

@ChrisMaddock Microsoft ๋˜๋Š” @ jnm2 ์ค‘ ์–ด๋Š ๊ฒƒ์ด ์ž˜ ๋ณด์ž…๋‹ˆ๊นŒ? @CharliePoole ์ด Microsoft ๋ชฉ๋ก์—์„œ ํ‘œ์‹œํ•œ ์„ธ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@oznetmaster - ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ชจ๋‘ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ œ์•ˆ๋œ @jnm2 ์˜ ๋” ๊ณ ๋„๋กœ ์ง€์ •๋œ ์˜ต์…˜์— ๋Œ€ํ•ด ์ด์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Microsoft ์ถ”์ถœ์€ ๊ทธ ํ•˜์œ„ ์ง‘ํ•ฉ์ธ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๊ฒฉ์— ๋ณ„๋กœ ๊ด€์‹ฌ์ด ์—†๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @jnm2 ๊ฐ€ ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ด ํ‘œ์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ณ ์ž ํ•œ๋‹ค๋ฉด ์˜์‹ฌํ•  ์—ฌ์ง€ ์—†์ด ๊ฐœ์„ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด ๋ˆˆ์— ๋น„์ „๋ฌธ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์ด๋ฉฐ ํ•ญ์ƒ ํŒ€์ด ์ž‘์—…์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒƒ์— ์˜ํ•ด ์–ด๋Š ์ •๋„ ์ถ”์ง„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” '์ง€์นจ' ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋ฅผ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ PR์—์„œ ๊ธฐ๊บผ์ด ๋”ฐ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์†Œํ•œ ๋ฌธ์ฒด ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ์บ์ฃผ์–ผ ๊ธฐ๊ณ ์ž๋ฅผ ๋Œ๋ ค๋ณด๋‚ด๋Š” ์•„์ด๋””์–ด์— ๊ทธ๋‹ค์ง€ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜ ์—ญ์‹œ ์–ด๋Š ์ชฝ๊ณผ๋„ ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์žˆ์—ˆ๊ณ , ํ•ญ์ƒ ์•ฝ๊ฐ„์˜ ์‹ค์šฉ์ฃผ์˜๋กœ ๋‹จ๋ จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

WRT ์ฝ”๋“œ ๊ฒ€ํ† , ์ด๊ฒƒ์€ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ๋“ค์ด ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ทผ๊ฑฐ์™€ ํ•จ๊ป˜ ์ œ์•ˆ๋˜๊ฑฐ๋‚˜ ๊ถŒ์žฅ๋˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ณ  ์‹ถ์€ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ‘œ์ค€์˜ ๊ฒฝ์šฐ ๋ฌธ์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ "๊ทธ๋ƒฅ ๋ฐ‘์ค„๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”."๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ OTOH๋Š” "์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ ์ €๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ํ…๋ฐ..."๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ผ๋ฐ˜ ๊ธฐ๊ณ ์ž๋Š” ์ด๋Ÿฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์™„์ „ํ•œ ํ˜•์‹์˜ ๊ฐœ๋…์„ ๊ฐ€์ง„ ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์ด ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” "์ƒ‰์ƒ"์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ทธ๊ฒƒ์„ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”ผ๋“œ๋ฐฑ์„ ์ด ํŽ˜์ด์ง€์— ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/nunit/docs/wiki/Best-practices-for-XML-documentation.

@์ฐฐ๋ฆฌํ’€

๋ชจ๋‘๊ฐ€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต .NET ์˜ˆ์™ธ์— ๋Œ€ํ•ด cref๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ์ž์‹ ์˜ ๋ฌผ๊ฑด์„ ์ข‹์•„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Intellisense ๋˜๋Š” ๋ฌธ์„œ๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๋งˆ๋‹ค ๋ˆˆ๊ธธ์„ ๋„๋Š” ์ฐจ์ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์›์‹œ XML๋„ ํ‰์†Œ๋ณด๋‹ค ์ฝ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ์ ์–ด๋„ ๊ทธ๊ฒƒ์„ ๋‚™๋‹ด์‹œํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋” ์ด์ƒ์˜ ์˜๊ฒฌ์ด ์—†์—ˆ์œผ๋ฏ€๋กœ ์ผ๋‹จ ์ด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰