Blog

[Java]35 ๐ŸŽฏ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) - 5๋Œ€ ์›์น™

Category
Author
Tags
PinOnMain
1 more property
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 5๋Œ€ ์›์น™ - S.O.L.I.D.
SOLID๋ž€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด์„œ ์ง€์ผœ์•ผํ•˜๋Š” 5๋Œ€ ์›์น™์ด ์žˆ๋‹ค. SOLID ์›์น™์„ ์ฒ ์ €ํžˆ ์ง€ํ‚ค๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ์žˆ๋‹ค.
1.
SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)
2.
OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)
3.
LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)
4.
DIP(์˜์กด ์—ญ์ „ ์›์น™)
5.
ISP(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)
๋‚˜๋Š” ์šฐ์„  ๊ฐ ์›์น™๋“ค์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค.

[1] ๋‹จ์ผย ์ฑ…์ž„์˜ย ์›์น™ (SRP,ย Singleย Responsibilityย Principle)

๋ชจ๋“  ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Аํ™”ํ•ด์•ผ ํ•จ์„ ๋งํ•œ๋‹ค.
โ€ข
์‚ฌ์น™์—ฐ์‚ฐ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ„์‚ฐ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์น˜์ž. ์ด ์ƒํƒœ์˜ ๊ณ„์‚ฐ ํด๋ž˜์Šค๋Š” ์˜ค์ง ์‚ฌ์น™์—ฐ์‚ฐ ๊ธฐ๋Šฅ๋งŒ์„ ์ฑ…์ž„์ง„๋‹ค. ์ด ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ์‚ฌ์ง์—ฐ์‚ฐ ํ•จ์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์ผ ๋ฟ์ด๋‹ค.

[2] ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (OCP, Open Closed Principle)

ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ๋Š”. ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ( Closed), ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก(Open) ์„ค๊ณ„๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์„ ๋งํ•œ๋‹ค.
โ€ข
์บ๋ฆญํ„ฐ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ• ๋•Œ, ๊ฐ๊ฐ์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ž„์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์›€์ง์ž„์˜ ํŒจํ„ด ๊ตฌํ˜„์„ ํ•˜์œ„ ํด๋ž˜์Šค์— ๋งก๊ธด๋‹ค๋ฉด ์บ๋ฆญํ„ฐ ํด๋ž˜์Šค์˜ ์ˆ˜์ •์€ ํ•„์š”๊ฐ€์—†๊ณ (Closed) ์›€์ง์ž„์˜ ํŒจํ„ด๋งŒ ์žฌ์ •์˜ ํ•˜๋ฉด ๋œ๋‹ค.(Open)

[3] ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP, Liskov Substitution Principle)

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

[4] ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP, Interface Segregation Principle)

ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚ซ๋‹ค.

[5] ์˜์กด ์—ญ์ „ ์›์น™ (DIP, Dependency Inversion Principle)

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