Study/CleanCode

[Study][CleanCode - 3] 12. ์ฐฝ๋ฐœ์„ฑ

youn12 2022. 8. 4. 17:57
๐Ÿ“‹ ๋ชฉ์ฐจ.

12. ์ฐฝ๋ฐœ์„ฑ
    .์ฐฝ๋ฐœ์  ์„ค๊ณ„๋กœ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ž.
    .๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 1 : ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ผ

    .๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 2~4 : ๋ฆฌํŽ™ํ„ฐ๋ง
    .
์ค‘๋ณต์„ ์—…์• ๋ผ
    .ํ‘œํ˜„ํ•˜๋ผ
    .ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ
    .๊ฒฐ๋ก 


โœ”๏ธ ๋‚ด์šฉ.

 

12. ์ฐฝ๋ฐœ์„ฑ

 

 


.์ฐฝ๋ฐœ์  ์„ค๊ณ„๋กœ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ž.

 

 1. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 2. ์ค‘๋ณต์„ ์—†์•ค๋‹ค

 3. ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

 4. ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ธ๋‹ค.

 

 ์ผ„ํŠธ ๋ฒก์ด ์ œ์‹œํ•œ ์œ„์˜ 4๊ฐ€์ง€ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉด ์šฐ์ˆ˜ํ•œ ์„ค๊ณ„๊ฐ€ ๋‚˜์˜ค๊ณ , ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ์„ค๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ SRP, DIP ๊ฐ™์€ ์›์น™์„ ์ ์šฉํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. ๋˜ํ•œ ์„ค๊ณ„๋Š” ๋‹จ์ˆœํ•˜๋‹ค๊ณ  ๋งํ•œ๋‹ค.

 ์ˆœ์„œ๋Š” ์ค‘์š”๋„ ์ˆœ์ด๋‹ค!


 

.๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 1 : ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ผ

 

 ๊ฒ€์ฆ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์€ ์ ˆ๋Œ€ ์ถœ์‹œํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์ฒ ์ €ํžˆ ๊ฑฐ์ณ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ•ญ์ƒ ํ†ต๊ณผํ•˜๋Š” ์‹œ์Šคํ…œ์€ 'ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ'์ด๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์€ ๊ฒ€์ฆ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 SRP๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฝ๋‹ค. ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์œผ๋ฉด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” DIP ๊ฐ™์€ ์›์น™์„ ์ ์šฉํ•˜๊ณ  DI, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. 

 

 'ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ณ„์† ๋Œ๋ ค๋ผ'๋ผ๋Š” ๋‹จ์ˆœ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉด ์‹œ์Šคํ…œ์€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋ ฅ์ด๋ผ๋Š”, ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก ์ด ์ง€ํ–ฅํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์ €์ ˆ๋กœ ๋‹ฌ์„ฑํ•œ๋‹ค.

 


 

.๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™ 2~4 : ๋ฆฌํŽ™ํ„ฐ๋ง

 

 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ชจ๋‘ ์ž‘์„ฑํ•˜์˜€๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ฆฌ ํŽ™ํ„ฐ ๋ง ํ•ด๋‚˜๊ฐ„๋‹ค. ์ฝ”๋“œ ๋ช‡ ์ค„์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ์„ค๊ณ„๋ฅผ ์กฐ๊ฐํ•œ๋‹ค.

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

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


 

.์ค‘๋ณต์„ ์—…์• ๋ผ

 

 ์šฐ์ˆ˜ํ•œ ์„ค๊ณ„์—์„œ ์ค‘๋ณต์€ ์ปค๋‹ค๋ž€ ์ ์ด๋‹ค. ์ถ”๊ฐ€ ์ž‘์—…, ์ถ”๊ฐ€ ์œ„ํ—˜, ๋ถˆํ•„์š”ํ•œ ๋ณต์žก๋„๋ฅผ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฉ”์†Œ๋“œ ์ค‘๋ณต ์ œ๊ฑฐ์˜ ์†Œ๊ทœ๋ชจ ์žฌ์‚ฌ์šฉ๋ถ€ํ„ฐ Template Method ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ ๊ณ ์ฐจ์› ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ํ™œ์šฉํ•ด๋ณธ๋‹ค.

 


 

.ํ‘œํ˜„ํ•˜๋ผ

 

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

 

 ์ฒซ์งธ, ์ข‹์€ ์ด๋ฆ„์„ ์„ ํƒํ•œ๋‹ค.

์ด๋ฆ„๊ณผ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋กœ ๋†€๋ผ๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

 ๋‘˜์งธ, ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ํฌ๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•œ ์ค„์ธ๋‹ค.

์ž‘์€ ํด๋ž˜์Šค์™€ ์ž‘์€ ํ•จ์ˆ˜๋Š” ์ด๋ฆ„ ์ง“๊ธฐ๋„ ์‰ฝ๊ณ , ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ์‰ฝ๊ณ , ์ดํ•ดํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค.

 

 ์…‹์งธ, ํ‘œ์ค€๋ช…์นญ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋กœ ๋””์ž์ธ ํŒจํ„ด์€ ์˜์‚ฌ์†Œํ†ต๊ณผ ํ‘œํ˜„๋ ฅ ๊ฐ•ํ™”๊ฐ€ ์ฃผ์š” ๋ชฉ์ ์ด๋‹ค. ํด๋ž˜์Šค๊ฐ€ Command๋‚˜ Visitor์™€ ๊ฐ™์€ ํ‘œ์ค€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋œ๋‹ค๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์— ํŒจํ„ด ์ด๋ฆ„์„ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ํด๋ž˜์Šค ์„ค๊ณ„์˜๋„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

 

 ๋„ท์งธ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๊ผผ๊ผผํžˆ ์ž‘์„ฑํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์†Œ์œ„ '์˜ˆ์ œ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฌธ์„œ'๋‹ค. ์ฆ‰, ์ž˜ ๋งŒ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ฝ์–ด๋ณด๋ฉด ํด๋ž˜์Šค ๊ธฐ๋Šฅ์ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜จ๋‹ค. 

 

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


 

.ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ

 

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

 ๋•Œ๋กœ๋Š” ๋ฌด์˜๋ฏธํ•˜๊ณ  ๋…๋‹จ์ ์ธ ์ •์ฑ… ํƒ“์— ํด๋ž˜์Šค ์ˆ˜์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ๋„ ํ•œ๋‹ค.

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

 ๋ชฉํ‘œ๋Š” ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์‹œ์— ์‹œ์Šคํ…œ ํฌ๊ธฐ๋„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ทœ์น™์€ ์•ž์„œ ๋งํ•œ 4 ๊ทœ์น™ ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ์ž‘์—…๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค, ์ค‘๋ณต ์ œ๊ฑฐ, ์˜๋„ ํ‘œํ˜„์ด ๋จผ์ €์ด๋‹ค.


 

.๊ฒฐ๋ก 

 

 ๊ฒฝํ—˜๋งŒํ•œ ๊ฐœ๋ฐœ ๊ธฐ๋ฒ•์€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ฑ…์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๊ธฐ๋ฒ•์€ ์ €์ž๋“ค์˜ ์ˆ˜์‹ญ ๋…„๊ฐ„์˜ ๊ฒฝํ—˜์˜ ์ •์ˆ˜์ด๋‹ค.

๋‹จ์ˆœํ•œ ์„ค๊ณ„ ๊ทœ์น™๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด ์˜ค๋žœ ๊ฒฝํ—˜ ํ›„ ์ตํž ์šฐ์ˆ˜ํ•œ ๊ธฐ๋ฒ•๊ณผ ์›์น™์„ ๋‹จ๋ฒˆ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ ๋Š๋‚€์ .

 1. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
 2. ์ค‘๋ณต์„ ์—†์•ค๋‹ค
 3. ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
 4. ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ธ๋‹ค.