๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Java] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP)

by Bhinney 2022. 12. 20.

๐Ÿ”Ž ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

๐Ÿ”Ž ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

์ถ”์ƒํ™” (Abstraction)
  • ๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ๋™์ž‘์„ ํ•˜๋‚˜๋กœ ์ถ”์ถœํ•ด๋‚ด๋Š” ์ž‘์—…
  • ์„ธ๋ถ€์ ์ธ ์‚ฌ๋ฌผ์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ํŒŒ์•…ํ•œ ํ›„, ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ์ถ”์ƒํ™”
์บก์Šํ™” (Encapsulation)
  • ์ •๋ณด ์€๋‹‰ํ™”๋ฅผ ํ†ตํ•ด ์‘์ง‘๋„, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ
  • ํ•œ ๊ณณ์— ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ
  • ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์–ด๋–ค ๋™์ž‘์— ๋Œ€ํ•œ ๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๋Š” ์ง€ ๊ฐ์ถ”๋Š” ๊ฒƒ
  • ๊ฐ์ฒด๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์‘์ง‘๋ ฅ์ด ๊ฐ•ํ•ด์•ผ ํ•˜๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์•„์•ผ ํ•จ
  • ๋ชฉ์  : ์ฝ”๋“œ๋ฅผ ์žฌ์ˆ˜์ • ์—†์ด ์žฌํ™œ์šฉ, ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•œ ์ •๋ณด ์€๋‹‰
์ƒ์†
  • ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๋“ค์ด ์ง€๋‹Œ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ถ€๊ฐ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ด๋‚˜ ๋ฒ•์น™์œผ๋กœ ์„ฑ๋ฆฝํ•˜๋Š” ๊ณผ์ •
  • ๊ธฐ์กด์˜ ํด๋ž˜์Šค๋ฅผ ์žฌ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ž๋ฐ”์˜ ๋ฌธ๋ฒ•์  ์š”์†Œ
  • "~๋กœ ๋ถ€ํ„ฐ ์ƒ์† ๋ฐ›์•˜๋‹ค" ๋ณด๋‹ค๋Š” "~๋กœ ๋ถ€ํ„ฐ ํ™•์žฅ๋˜์—ˆ๋‹ค"๊ฐ€ ๋” ์ ์ ˆํ•œ ํ‘œํ˜„
๋‹คํ˜•์„ฑ (Polymorphism)
  • ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋™์ž‘ ์ˆ˜ํ–‰์„ ๋ช…๋ น ๋ฐ›์•˜์„ ๋•Œ, ๊ฐ์ž์˜ ํŠน์„ฑ์— ๋งž๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•ต์‹ฌ
  • ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ  ์œ ์—ฐํ•จ์„ ๊ฐ–๊ฒŒ ํ•ด์คŒ
  • ์˜ˆ์‹œ : ์˜ค๋ฒ„ ๋ผ์ด๋”ฉ, ์˜ค๋ฒ„ ๋กœ๋”ฉ

๐Ÿ”Ž ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ (SOLID)

SRP(Single Responsibility) : ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™
  • ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐœ์˜ ์ฑ…์ž„(๊ธฐ๋Šฅ)์„ ๊ฐ€์ ธ์•ผ ํ•จ
  • ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜์—ฌ์•ผ ํ•จ
  • ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง (ํ•˜๋‚˜์˜ ์ฑ…์ž„ ๋ณ€๊ฒฝ์— ๋‹ค๋ฅธ ์ฝ”๋“œ๋„ ์˜ํ–ฅ)

 

OCP(Open-Closed) : ๊ฐœ๋ฐฉ-ํŒจ์‡„ ์›์น™
  • ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•จ
  • ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ
  • ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์žฅ์ ์ด ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†์Œ

 

LSP(Liskov Substitution) : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
  • ํ•˜์œ„ ํƒ€์ž… ๊ฐ์ฒด๋Š” ์ƒ์œ„ ํƒ€์ž… ๊ฐ์ฒด์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ๊ผญ ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•ด์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ
  • ํ•ด๋‹น ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ ์œ„๋ฐ˜
ISP(Interface Segregation) : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ์—๋งŒ ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž˜๊ฒŒ ๋ถ„๋ฆฌ ๋˜์–ด์•ผ ํ•จ
  • ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ์ƒ๊ฒจ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ

 

DIP(Dependency Inversion) : ์˜์กด ์—ญ์ „ ์›์น™
  • ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ, ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ(๊ตฌ์ฒด์ ์ธ ๊ฒƒ) ๋ณด๋‹ค๋Š” ๋ณ€ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ(์ถ”์ƒ์ ์ธ ๊ฒƒ)์— ์˜์กด
  • ์ฆ‰, ๊ตฌ์ฒดํ™” ๋œ ํด๋ž˜์Šค ๋ณด๋‹ค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป
  • ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒ ํƒ€์ž…์— ์˜์กด
  • ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ๋ณ€๊ฒฝ์ด ํ•„์š” ์—†๋Š” ํ˜•ํƒœ๊ฐ€ ์ด์ƒ์ 

์ฐธ๊ณ  :

https://velog.io/@haero_kim/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

https://velog.io/@haero_kim/SOLID-%EC%9B%90%EC%B9%99-%EC%96%B4%EB%A0%B5%EC%A7%80-%EC%95%8A%EB%8B%A4

 

๋Œ“๊ธ€