SOLID

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ 5์›์น™์œผ๋กœ SOLID๊ฐ€ ์†Œ๊ฐœ๋จ

โ†’ ๋†’์€ ์‘์ง‘๋„, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ผ๋Š” ๊ณ ์ „์ ์ธ ๊ฐœ๋ฐœ์›์น™์„ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๊ด€์ ์—์„œ ๋‹ค์‹œ ์ •๋ฆฝํ•œ ๊ฒƒ์ด SOLID ์›์น™

  1. SRP single responsibility - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

  • ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜ ๋ฟ์ด์–ด์•ผ ํ•œ๋‹ค

  • ์—ญํ• (์ฑ…์ž„)์„ ๋ถ„๋ฆฌํ•œ๋‹ค

  • ๊ฐ์ฒด์ง€ํ–ฅ 4๋Œ€ ํŠน์„ฑ ์ค‘ ํ•˜๋‚˜์ธ ์ถ”์ƒํ™”(๋ชจ๋ธ๋ง ๊ณผ์ •)์„ ํ†ตํ•ด ํด๋ž˜์Šค ์„ ๋ณ„, ์†์„ฑ, ๋ฉ”์„œ๋“œ ์„ค๊ณ„ ์‹œ์— ๋ฐ˜๋“œ์‹œ SRP๋ฅผ ๊ณ ๋ คํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž

  1. OCP open closed- ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

  • ์ž์‹ ์˜ ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ์ฃผ๋ณ€์˜ ๋ณ€ํ™”์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์ƒ์œ„ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค‘๊ฐ„์— ๋‘์–ด์„œ ๋ณ€ํ™”์— ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค

  1. LSP Liskov substitution - ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

  • ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋œ๋‹ค(Robert C. martin)

  • ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค, ๊ตฌํ˜„ ํด๋ž˜์Šค is able to ์ธํ„ฐํŽ˜์ด์Šค โ†’ ์ด ๋ฌธ์žฅ๋Œ€๋กœ ๊ตฌํ˜„๋œ ํ”„๋กœ๊ทธ๋žจ์ด๋ฉด LSP๋ฅผ ์ž˜ ์ง€ํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ

    • ์˜ˆ์™ธ: ์ƒ์†์ด ์กฐ์ง๋„๋‚˜ ๊ณ„์ธต๋„ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ

    • ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์œ„ํ˜• ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค

  1. ISP interface segregation- ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

  • ํด๋ผ์ด์–ดํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์œผ๋ฉด ์•ˆ๋œ๋‹ค

  • SRP์™€ ISP๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‘๊ฐ€์ง€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…. ํ•˜์ง€๋งŒ SRP๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค ์ตœ์†Œ์ฃผ์˜ ์›์น™: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•  ๋•Œ๋Š” ์ตœ์†Œํ•œ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

    โ†” LSP์— ๋”ฐ๋ฅด๋ฉด ์ƒ์œ„ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๋งŽ์„์ˆ˜๋ก ์ข‹๋‹ค. ISP์— ๋”ฐ๋ฅด๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์€ ์ž‘์„ ์ˆ˜๋ก ์ข‹๋‹ค.

    • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์ด ๋นˆ์•ฝํ•˜๋ฉด ํ˜•๋ณ€ํ™˜์ด ์ž์ฃผ ์ผ์–ด๋‚˜์„œ ์ƒ์†์˜ ํ˜œํƒ์„ ๋ณผ ์ˆ˜ ์—†๋‹ค.

    • ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ์ด ์ž‘์•„์•ผ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. DIP dependency inversion - ์˜์กด ์—ญ์ „ ์›์น™

  • ์ž์‹ ๋ณด๋‹ค ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ

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

  • ์ถ”์ƒํ™”๋œ ๊ฒƒ์€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ด ์ถ”์ƒํ™”๋œ ๊ฒƒ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค

  • ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์ฒด(concrete) ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ

  • SoC(separation of concerns): ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ. ๊ด€์‹ฌ์ด ๊ฐ™์€ ๊ฒƒ ๋ผ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด ํ˜น์€ ์นœํ•œ ๊ฐ์ฒด๋กœ ๋ชจ์šฐ๊ณ , ๊ด€์‹ฌ์ด ๋‹ค๋ฅธ ๊ฒƒ์€ ์„œ๋กœ ๋–จ์–ด์ ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌํ•˜๋Š” ์›์น™.

  • SoC๋ฅผ ์ ์šฉํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ SOLID ์›์น™์„ ์ ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

Last updated