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

๐Ÿค Chapter 4. ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ 4๋Œ€ ์š”์†Œ

๐Ÿฅ• ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ 4๋Œ€ ์š”์†Œ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ธฐโ€‹

์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—๋Š” ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ํŠน์„ฑ์ด ์žˆ๋‹ค.

  • ํšŒ๊ท€ ๋ฐฉ์ง
  • ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ
  • ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ
  • ์œ ์ง€ ๋ณด์ˆ˜์„ฑ

์ด ๋„ค ๊ฐ€์ง€ ํŠน์„ฑ์ด ๊ธฐ๋ณธ์ด๋‹ค. ์ด ํŠน์„ฑ์œผ๋กœ ์–ด๋–ค ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽˆ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ: ํšŒ๊ท€ ๋ฐฉ์ง€โ€‹

ํšŒ๊ท€๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„๊ทธ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ๊ธฐ๋Šฅ์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋‹ค.

ํšŒ๊ท€ ๋ฐฉ์ง€ ์ง€ํ‘œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ํ‰๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์ค‘์— ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์˜ ์–‘
  • ์ฝ”๋“œ ๋ณต์žก๋„
  • ์ฝ”๋“œ์˜ ๋„๋ฉ”์ธ ์œ ์˜์„ฑ

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

public class User {
public string Name { get; set; }
}

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

๐ŸŽˆ ๋‘ ๋ฒˆ์งธ ์š”์†Œ: ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑโ€‹

์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋‘ ๋ฒˆ์งธ ํŠน์„ฑ์€ ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ์ด๋‹ค. ์ด๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋นจ๊ฐ„์ƒ‰(์‹คํŒจ)์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ฒ™๋„๋‹ค.

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

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

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

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

๊ฑฐ์ง“ ์–‘์„ฑ์€ ์ด ๋‘ ๊ฐ€์ง€ ์ด์ ์„ ๋ชจ๋‘ ๋ฐฉํ•ดํ•œ๋‹ค.

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

๐ŸŽˆ ๋ฌด์—‡์ด ๊ฑฐ์ง“ ์–‘์„ฑ์˜ ์›์ธ์ธ๊ฐ€?โ€‹

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

ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌธ์ œ ์˜์—ญ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด, ์ด์•ผ๊ธฐ์™€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์ด ์„œ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด์ง„ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” ํ…Œ์ŠคํŠธ ์‹คํŒจ ์œ ํ˜• ์ค‘ ์œ ์ผํ•˜๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์œ ํ˜•์ด๋‹ค.

๋‹ค์Œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž. ์—ฌ๊ธฐ์„œ MessageRenderer ํด๋ž˜์Šค๋Š” ๋จธ๋ฆฌ๊ธ€, ๋ณธ๋ฌธ, ๋ฐ”๋‹ฅ๊ธ€์„ ํฌํ•จํ•˜๋Š” ๋ฉ”์‹œ์ง€์˜ HTML ํ‘œํ˜„์„ ์ƒ์„ฑํ•œ๋‹ค.

public class Message {
public string Header { get; set; }
public string Body { get; set; }
public string Footer { get; set; }
}

public interface IRenderer {
string Render(Message message);
}

public class MessageRenderer : IRenderer {
public IReadOnlyList<IRenderer> SubRenderers { get; }
public MessageRenderer() {
SubRenderers = new List<IRenderer> {
new HeaderRenderer(),
new BodyRenderer(),
new FooterRenderer(),
};
}

public string Render(Message message) {
return SubRenderers
.Select(x => x.Render(message))
.Aggregate("", (str1, str2) => str1 + str2);
}
}

MessageRenderer๋ฅผ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„๊นŒ? ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์€ ์ด ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋ฅด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

[Fact]
public void MessageRenderer_uses_correct_sub_renderers() {
var sut = new MessageRenderer();

IReadOnlyList<IRenderer> renderers = sut.SubRenderers;

Assert.Equal(3, renderers.Count);
Assert.IsAssignableFrom<HeaderRenderer>(renderers[0]);
Assert.IsAssignableFrom<BodyRenderer>(renderers[1]);
Assert.IsAssignableFrom<FooterRenderer>(renderers[2]);
}

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

์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์„์ง€๋ผ๋„, ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๋ณ€ํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ SUT๊ฐ€ ์ƒ์„ฑํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋ผ SUT์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๊ฒฐํ•ฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋Š” ๋˜‘๊ฐ™์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ๊ตฌํ˜„๋งŒ ์˜ˆ์ƒํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

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

  • ํšŒ๊ท€ ๋ฐœ์ƒ ์‹œ ์กฐ๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฆฌํŒฉํ„ฐ๋ง์— ๋Œ€ํ•œ ๋Šฅ๋ ฅ๊ณผ ์˜์ง€๋ฅผ ๋ฐฉํ•ดํ•œ๋‹ค.

๐ŸŽˆ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ ๋Œ€์‹  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๊ธฐโ€‹

ํ…Œ์ŠคํŠธ๋ฅผ ๊นจ์ง€์ง€ ์•Š๊ณ  ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์€ SUT์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ์ฆ‰, ์ฝ”๋“œ์˜ ๋‚ด๋ถ€ ์ž‘์—…๊ณผ ํ…Œ์ŠคํŠธ ์‚ฌ์ด์˜ ๊ฐ€๋Šฅํ•œ ํ•œ ๋ฉ€๋ฆฌ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋จผ์ € ๋‹ค์Œ ์‚ฌํ•ญ์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. MessageRenderer์—์„œ ์–ป์€ ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ธ๊ฐ€? ๋ฉ”์‹œ์ง€์˜ HTML ํ‘œํ˜„์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋งˆ๋•…ํ•˜๋‹ค. ์ด HTML ํ‘œํ˜„์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋Š” ํ•œ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๋Š”์ง€๋Š” ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ƒ๊ด€์—†๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ์˜ ์ƒˆ ๋ฒ„์ „์ด๋‹ค.

[Fact]
public void Rendering_a_message() {
var sut = new MessageRenderer();
var message = new Message {
Header = "h",
Body = "b",
Footer = "f"
};
string html = sut.Render(message);
Assert.Equal("<h1><h</h1><b>b</b><i>f</i>", html);
}

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

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

๐Ÿฅ• ์ฒซ ๋ฒˆ์งธ ํŠน์„ฑ๊ณผ ๋‘ ๋ฒˆ์งธ ํŠน์„ฑ ๊ฐ„์˜ ๋ณธ์งˆ์ ์ธ ๊ด€๊ณ„โ€‹

๐ŸŽˆ ํ…Œ์ŠคํŠธ ์ •ํ™•๋„ ๊ทน๋Œ€ํ™”โ€‹

์ฝ”๋“œ ์ •ํ™•๋„์™€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด์„œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ถ”๋ก (์ฐธ ์Œ์„ฑ / ํ…Œ์ŠคํŠธ ํ†ต๊ณผ / ์ž‘๋™), 2์ข… ์˜ค๋ฅ˜(๊ฑฐ์ง“ ์Œ์„ฑ / ํ…Œ์ŠคํŠธ ํ†ต๊ณผ / ๊ณ ์žฅ / ํšŒ๊ท€ ๋ฐฉ์ง€), 1์ข… ์˜ค๋ฅ˜(๊ฑฐ์ง“ ์–‘์„ฑ / ํ…Œ์ŠคํŠธ ์‹คํŒจ / ์ž‘๋™ / ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ), ์˜ฌ๋ฐ”๋ฅธ ์ถ”๋ก (์ฐธ ์–‘์„ฑ / ํ…Œ์ŠคํŠธ ์‹คํŒจ / ๊ณ ์žฅ) ๋„ค ๊ฐ€์ง€ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ์ด ์ž˜ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๊ณ ์žฅ ๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.

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

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

ํ…Œ์ŠคํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค. ์ด๋Š” "๊ฑฐ์ง“ ์Œ์„ฑ"์ด๋‹ค. ๊ฑฐ์ง“ ์Œ์„ฑ์„ ํ”ผํ•˜๋Š” ๋ฐ ์ข‹์€ ํ…Œ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ํŠน์„ฑ์ธ ํšŒ๊ท€ ๋ฐฉ์ง€๊ฐ€ ๋„์›€์ด ๋œ๋‹ค.

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

ํšŒ๊ท€ ๋ฐฉ์ง€์™€ ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ์€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ ์ •ํ™•๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ์ •ํ™•๋„ ์ง€ํ‘œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฒ„๊ทธ ์žˆ์Œ์„ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š”๊ฐ€(๊ฑฐ์ง“ ์Œ์„ฑ(ํšŒ์œ„ ๋ฐฉ์ง€ ์˜์—ญ) ์ œ์™ธ).
  • ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฒ„๊ทธ ์—†์Œ์„ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š”๊ฐ€(๊ฑฐ์ง“ ์–‘์„ฑ(๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ ์˜์—ญ) ์ œ์™ธ).

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

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

๐ŸŽˆ ๊ฑฐ์ง“ ์–‘์„ฑ๊ณผ ๊ฑฐ์ง“ ์Œ์„ฑ์˜ ์ค‘์š”์„ฑ: ์—ญํ•™ ๊ด€๊ณ„โ€‹

ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ๊ฑฐ์ง“ ์–‘์„ฑ์€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ์ ์  ๋” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

์ดˆ๊ธฐ์—๋Š” ์™œ ๊ฑฐ์ง“ ์–‘์„ฑ์ด ์ค‘์š”ํ•˜์ง€ ์•Š์€๊ฐ€? ๋ฆฌํŒฉํ„ฐ๋ง์€ ๋ฐ”๋กœ ์ค‘์š”ํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์ ์ฐจ ์ค‘์š”ํ•ด์ง„๋‹ค.
๋ฆฌํŒฉํ„ฐ๋ง์ด ์ ์  ๋” ํ•„์š”ํ•ด์ง์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ์—์„œ ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ๋„ ์ ์  ๋” ์ค‘์š”ํ•ด์ง„๋‹ค.

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

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

๐Ÿฅ• ์„ธ ๋ฒˆ์งธ ์š”์†Œ์™€ ๋„ค ๋ฒˆ์งธ ์š”์†Œ: ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑโ€‹

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

๋งˆ์ง€๋ง‰์œผ๋กœ ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋„ค ๋ฒˆ์งธ ํŠน์„ฑ์ธ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ๋Š” ์œ ์ง€๋น„๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค. ์ด ์ง€ํ‘œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

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

๐Ÿฅ• ์ด์ƒ์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•„์„œโ€‹

์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ 4๋Œ€ ํŠน์„ฑ์„ ๋‹ค์‹œ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํšŒ๊ท€ ๋ฐฉ์ง€
  • ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ
  • ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ
  • ์œ ์ง€ ๋ณด์ˆ˜์„ฑ

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

๐ŸŽˆ ์ด์ƒ์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€?โ€‹

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

๋‘ ํŠน์„ฑ์„ ์ตœ๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ด์„œ ํ•œ ๊ฐ€์ง€ ํŠน์„ฑ์„ ํฌ์ƒํ•ด ๊ฒฐ๊ตญ ๊ฐ€์น˜๊ฐ€ 0์— ๊ฐ€๊นŒ์›Œ์ง„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋กœ ์‚ดํŽด๋ณด์ž.

๐ŸŽˆ ๊ทน๋‹จ์ ์ธ ์‚ฌ๋ก€ 1: ์—”๋“œ ํˆฌ ์—”๋“œ ํ…Œ์ŠคํŠธโ€‹

์—”๋“œ ํˆฌ ์—”๋“œ ํ…Œ์ŠคํŠธ๋Š” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฏ€๋กœ ํšŒ๊ท€ ๋ฐฉ์ง€๋ฅผ ํ›Œ๋ฅญํžˆ ํ•ด๋‚ธ๋‹ค. ์‹ค์ œ๋กœ ๋ชจ๋“  ์œ ํ˜•์ด ํ…Œ์ŠคํŠธ ์ค‘์—์„œ ์—”๋“œ ํˆฌ ์—”๋“œ ํŠธ์„ธํŠธ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ, ์„œ๋“œํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๊ณผ ๊ฐ™์ด ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์ˆ˜ํ–‰ํ•œ๋‹ค.

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

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

์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋Š” ํšŒ๊ท€ ์˜ค๋ฅ˜์™€ ๊ฑฐ์ง“ ์–‘์„ฑ์— ๋Œ€ํ•œ ๋ฐฉ์ง€๋ฅผ ํœผ๋ฅญํžˆ ํ•ด๋‚ด์ง€๋งŒ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

๐ŸŽˆ ๊ทน๋‹จ์ ์ธ ์‚ฌ๋ก€2: ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธโ€‹

์„ธ ๋ฒˆ์งธ ํŠน์„ฑ์„ ํฌ์ƒํ•ด์„œ ๋‚˜๋จธ์ง€ ๋‘ ์†์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ "๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ"๊ฐ€ ์žˆ๋‹ค.

public class User {
public string Name { get; set; } // ์ด ํ•œ ์ค„์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‹ค.
}

[Fact]
public void Test() {
var sut = new User();

sut.Name = "John Smith";

Assert.Equal("John Smith", sut.Name);
}

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

์‹ฌ์ง€์–ด ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋Š” ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ€ ๋ฟ "๋™์–ด ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ"๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋Š” ํ•ญ์ƒ ํ†ต๊ณผํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆ์ด ๋ฌด์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ๋„ ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค.

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋Š” ์šฐ์ˆ˜ํ•œ ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ๊ณผ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ํšŒ๊ท€ ๋ฐฉ์ง€๊ฐ€ ์—†๋‹ค.

๐ŸŽˆ ๊ทน๋‹จ์ ์ธ ์‚ฌ๋ก€ 3: ๊นจ์ง€๊ธฐ ์‰ฌ์šด ํ…Œ์ŠคํŠธโ€‹

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

์‹คํ–‰ ์ค‘์ด SQL ๋ฌธ์„ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ
public class UserRepository {
public User GetById(int id) {
//
}

public string LastExecutedSqlStatement { get; set; }
}

[Fact]
public void GetById_executes_correct_SQL_code() {
var sut = new UserRepository();

User user = sut.GetById(5);

Assert.Equal(
"SELECT * FROM dbo.[User] WHERE UserID = 5",
sut.LastExecutedSqlStatement)
}

์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€? ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ์ž๊ฐ€ SQL ์ฝ”๋“œ ์ƒ์„ฑ์„ ์—‰๋ง์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ณ  UserID ๋Œ€์‹  ID๋กœ ์ž˜๋ชป ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ด์„œ ์ด๋ฅผ ์ง€์ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ์ด ์ข‹์€๊ฐ€? ์ ˆ๋Œ€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด SQL ๋ฌธ์„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ ๊ฐ™๋‹ค.

SELECT * FROM dbo.[User] WHERE UserID = 5
SELECT * FROM dbo.User WHERE UserID = 5
SELECT UserID, Name, Email FROM dbo.[User] WHERE UserID = 5
SELECT * FROM dbo.[User] WHERE UserID = @UserID

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

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

๐ŸŽˆ ์ด์ƒ์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•„์„œ: ๊ฒฐ๋ก โ€‹

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

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

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

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

ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ํ…Œ์ŠคํŠธ์˜ ๋ถˆ์•ˆ์ •(๊ฑฐ์ง“ ์–‘์„ฑ)์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ตœ์šฐ์„  ๊ณผ์ œ๋‹ค.

๐Ÿฅ• ๋Œ€์ค‘์ ์ธ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ฐœ๋… ์‚ดํŽด๋ณด๊ธฐโ€‹

๐ŸŽˆ ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ ๋ถ„ํ•ดโ€‹

ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ๋Š” ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์—์„œ ํ…Œ์ŠคํŠธ ์œ ํ˜• ๊ฐ„์˜ ์ผ์ •ํ•œ ๋น„์œจ์„ ์ผ์ปซ๋Š” ๊ฐœ๋…์ด๋‹ค.

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

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

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

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

ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋Š” ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€ ์˜์กด์„ฑ ํ•˜๋‚˜๋งŒ ์—ฐ๊ฒฐํ•˜๋Š” API๋‹ค.

๐ŸŽˆ ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ์™€ ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ฐ„์˜ ์„ ํƒโ€‹

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

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

ํšŒ๊ท€ ๋ฐฉ์ง€๋ฆฌํŒฉํ„ฐ๋ง ๋‚ด์„ฑ
ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ์ข‹์Œ๋‚˜์จ
๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ๋‚˜์จ์ข‹์Œ

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

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