์„ฑ์ฐฐ ๊ฐ€์†ํ™”์— ๊ด€ํ•œ ์‹คํŒจํ•œ ๊ธฐ์‚ฌ

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

๋‚˜๋Š” ์ด ๊ธฐ์‚ฌ์˜ ์ธ์ƒ์„ ๋ฐ›์•„ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‚ฌ๊ฐ€ ๋Š๋ฆฐ ์ด์œ 

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

๋‚˜๋Š” ์„ฑ์ฐฐ์˜ ์†๋„์— ๋Œ€ํ•ด ๋Š˜ ๋น„์Šทํ•œ ์˜๊ฒฌ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํžˆ ์ €์ž์˜ ๊ฒฐ๋ก ์— ์˜๋ฌธ์„ ์ œ๊ธฐํ•  ์˜๋„๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๊นŒ? ๋ณธ์งˆ์ ์œผ๋กœ ์ด๋Š” ํ”Œ๋žซํผ ์ž์ฒด๊ฐ€ JIT ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋…ผ๋ฆฌ์™€ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์ฒ˜์Œ ํ˜ธ์ถœ๋˜๋ฉด ์ปดํŒŒ์ผ๋˜๊ณ (๋ฌผ๋ก  ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๋น ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ํ›„์† ํ˜ธ์ถœ์—์„œ๋Š” ์ œ์–ด๊ฐ€ ์ด๋ฏธ ์ปดํŒŒ์ผ๋œ ๋ฉ”์„œ๋“œ๋กœ ์ด์ „๋˜๋ฏ€๋กœ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ JIT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ AOT์™€ ๋™์ผํ•œ ์„ฑ๋Šฅ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ๋™์ž‘์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ‘œํ˜„์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋žตํ•˜๊ฒŒ ๊ณต์‹ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ๋œ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€๋ฆฌ์ž๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ์ฒด ์™ธ๋ถ€์— ์ €์žฅ๋˜๋Š” ์ž‘์—…์ž ์œ ํ˜• ํ•„๋“œ์˜ ์œ ํ˜• ์ •๋ณด์™€ ํ•จ๊ป˜ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์บ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์‹์— ๋”ฐ๋ฅด๋ฉด ์ปดํŒŒ์ผํ•˜๊ณ  ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” ์ œ์•ˆ๋œ ํ‘œํ˜„์‹ ์ปดํŒŒ์ผ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฆฌํ”Œ๋ ‰์…˜ ์ž‘์—… ์‹œ ์บ์‹œ์— ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์„œ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ธฐ์‚ฌ ์ž‘์„ฑ์ž์˜ ๋…ผ๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

์šฐ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ณต์žฅ.

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

๋…ผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ ํŒŒ์„œ ๋…ผ๋ฆฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์Œ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. LINQ ๊ณ„์ธต์€ ํŒŒ์„œ์ด์ž ํ•˜์ด๋“œ๋ ˆ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ๋…ผ๋ฆฌ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…์ŠคํŠธ์— ์š”์ฒญํ•˜๊ณ  ํŒŒ์„œ์˜ ์Œ๊ณผ ํ‚ค๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ ๋น„๊ต๋ฅผ ์œ„ํ•ด LINQ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค). ๋‹ค์Œ์œผ๋กœ ์Œ์€ ๊ธฐ๋ณธ ์ˆ˜ํ™” ๋ฐฉ๋ฒ•์œผ๋กœ ์ „๋‹ฌ๋˜๊ณ  ์Œ์˜ ๊ฐ’์€ ์—”ํ„ฐํ‹ฐ์˜ ํ•ด๋‹น ์†์„ฑ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

"Fast"(๋ฒค์น˜๋งˆํฌ์—์„œ Fast๋ผ๋Š” ์ ‘๋‘์‚ฌ):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

๋ณด์‹œ๋‹ค์‹œํ”ผ, setter ์†์„ฑ์ด ์žˆ๋Š” ์ •์  ์ปฌ๋ ‰์…˜, ์ฆ‰ setter ์—”ํ„ฐํ‹ฐ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ปดํŒŒ์ผ๋œ ๋žŒ๋‹ค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action<Contact, string> GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

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

"๋Š๋ฆผ"(๋ฒค์น˜๋งˆํฌ์—์„œ ์ ‘๋‘์‚ฌ ๋Š๋ฆผ):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

์—ฌ๊ธฐ์„œ๋Š” ์ฆ‰์‹œ ์†์„ฑ์„ ์šฐํšŒํ•˜๊ณ  SetValue๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋ช…ํ™•์„ฑ๊ณผ ์ฐธ๊ณ ๋ฅผ ์œ„ํ•ด ์ƒ๊ด€ ์Œ์˜ ๊ฐ’์„ ์—”ํ„ฐํ‹ฐ ํ•„๋“œ์— ์ง์ ‘ ์“ฐ๋Š” ์ˆœ์ง„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ โ€“ ์ˆ˜๋™.

์ด์ œ BenchmarkDotNet์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ‘์ž๊ธฐ... (์Šคํฌ์ผ๋Ÿฌ - ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค)

์„ฑ์ฐฐ ๊ฐ€์†ํ™”์— ๊ด€ํ•œ ์‹คํŒจํ•œ ๊ธฐ์‚ฌ

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

์—…๋ฐ์ดํŠธ]

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

์žฌํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„ฑ์ฐฐ ๊ฐ€์†ํ™”์— ๊ด€ํ•œ ์‹คํŒจํ•œ ๊ธฐ์‚ฌ

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

๋ฒค์น˜๋งˆํฌ ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ๋‚ด ๋ง์„ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Habra๋ฐ˜์‚ฌ ํ…Œ์ŠคํŠธ

์ถ”์‹ : ํ…Œ์ŠคํŠธ์˜ ์ฝ”๋“œ๋Š” IoC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฒค์น˜๋งˆํฌ์—์„œ๋Š” ๋ช…์‹œ์  ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋Š” ์ตœ์ข… ๊ตฌํ˜„์—์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‹œ๋„๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€