[TIL] SOLID ์›์น™

link717ยท2021๋…„ 10์›” 24์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
50/53
post-thumbnail

๐ŸŒผ SOLID ์›์น™

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

  • SRP(Single Responsibility Principle): ๋‹จ์ผ ์ฑ…์ž„ ์›์น™, ํด๋ž˜์Šค์—๋Š” ๋‹จ ํ•œ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹จ์ผ๊ณผ ์ฑ…์ž„์€ ์–ด๋–ค ๊ธฐ์ค€์„ ๊ฐ–๋Š๋ƒ์— ๋”ฐ๋ผ ํ•œ ์—†์ด ์ปค์งˆ์ˆ˜๋„ ๋ฐ˜๋Œ€๋กœ ํ•œ ์—†์ด ์ž‘์•„์งˆ์ˆ˜๋„ ์žˆ๋Š” ๊ฐœ๋…์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ค€์„ ์ž˜ ์žก๊ณ  ํ•ด๋‹น ์›์น™์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. SRP๋ฅผ ์ค€์ˆ˜ํ•œ ํด๋ž˜์Šค๋Š” ์‘์ง‘๋„๊ฐ€ ๋†’๊ณ  ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„ ํŠน์ • ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ์ˆ˜์ •์ด ํ•œ๊ณณ์— ์ง‘์ค‘๋œ๋‹ค.

    • Q. ๋‹จ์ˆœํžˆ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฑ…์ž„ ๊ฐœ์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

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

      • (1์ธ 1์—ญ) ํ•ด๋‹น ์›์น™์„ ์ž˜ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ, ํ•จ์ˆ˜์˜ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ ธ์„œ ์ถ”ํ›„ ์ˆ˜์ •์ด ์–ด๋ ค์šด ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์˜ ๊ด€์ ์—์„œ ๋ถ„๋ฆฌ๋  ์ด์œ ๊ฐ€ ์—†๋Š”๋ฐ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ๋†’์ด๋Š” ํ–‰์œ„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • OCP(Open/Closed Principle): ๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™, ํด๋ž˜์Šค๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    • OCP์— ๋งŒ์กฑํ•˜๋Š” ์„ค๊ณ„๋ฅผ ํ•  ๋•Œ์—๋Š” ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•œ๋‹ค. ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๋‚ด์šฉ์€ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ , ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ๊ฒƒ์€ ์ˆ˜์ •๋˜๋Š” ๋‚ด์šฉ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•์ด interface์ด๋‹ค.

  • LSP(Liskov Substitution Principle): ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜์˜ ์›์น™, ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋Š” ๊ธฐ์ดˆ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

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

  • ISP(Interface Segregation Principle): ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™, ํด๋ผ์ด์–ธํŠธ์— ๋ฐ€์ ‘ํ•˜๊ฒŒ ์ž‘๊ฒŒ ์ชผ๊ฐœ์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์ฆ‰, ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ๋ณด๋‹ค๋Š”, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚ฎ๋‹ค๋Š” ์›์น™์ด๋‹ค.

  • DIP(Dependency Inversion Principle): ์˜์กด ์—ญ์ „ ์›์น™, ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•˜๋ฉฐ, ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉฐ ์•ˆ๋œ๋‹ค.

    • ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ, ๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด๊ฒƒ ๋ณด๋‹จ ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด๊ฒƒ์ด๋ž€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋งํ•˜๊ณ , ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์ด๋ž€ ์ถ”์ƒ์ ์ธ ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰, DIP๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ, ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ถœ์ฒ˜: YOUTUBE-Kenu Heo
YOUTUBE-์ฝ”๋“œ์—†๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํ‹ฐ์Šคํ† ๋ฆฌ-SOLID ์›์น™

profile
Turtle Never stop

0๊ฐœ์˜ ๋Œ“๊ธ€