MAIN/Java & Spring

[Spring] OOP: SOLID ์›์น™

ํƒํŠธ 2025. 3. 26. 03:26

Object-Oriented Programming


๐Ÿ‘‰ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๋‹ค์„ฏ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์„ค๊ณ„ ์›์น™์„ SOLID ์›์น™์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

*๋”๋ณด๊ธฐ๋Š” ๊ด€๋ จ ์˜ˆ์‹œ์ž„

 

1. Single Responsibility Principle (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  • ์ฆ‰, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•œ ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋”๋ณด๊ธฐ

โœ… ์ •๋ณด ์ €์žฅ ๊ธฐ๋Šฅ๊ณผ ์ •๋ณด ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ

2. Open/Closed Principle (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)

  • ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ฆ‰, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.
๋”๋ณด๊ธฐ

โœ… ์กฐ๊ฑด๋ฌธ ๋Œ€์‹ , ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ™•์žฅ

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

  • ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
๋”๋ณด๊ธฐ

โœ… Rectangle์„ ์ƒ์†ํ•œ Square๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅ

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

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • ์ฆ‰, ํฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜๋ˆˆ๋‹ค.
๋”๋ณด๊ธฐ

โœ… Animal ์ธํ„ฐํŽ˜์ด์Šค์— fly() ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ , Bird ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋งŒ fly()๋ฅผ ์ •์˜

5. Dependency Inversion Principle (์˜์กด ์—ญ์ „ ์›์น™)

  • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • ์ฆ‰, ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•ด์•ผ ํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋”๋ณด๊ธฐ

โœ… Database ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ฃผ์ž