๐Ÿ’ป BackEnd/๐ŸŸจ Java

๐ŸŸจ [Java] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)

Dbswnstjd 2023. 4. 5. 20:59

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

๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์งœ๋Š” ๊ฒƒ. ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด๋ž€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค๋ฉด ์ž๋™์ฐจ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ž๋™์ฐจ์— ๋“ค์–ด๊ฐ€๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ถ€ํ’ˆ๋“ค์ด ์žˆ๋‹ค. ํ•ธ๋“ค, ํƒ€์ด์–ด, ์—”์ง„ ๋“ฑ๋“ฑ ์ด๋Ÿฌํ•œ ๋ถ€ํ’ˆ๋“ค์ด ๋ชจ๋‘ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์ด ๋ชจ์—ฌ ์ž๋™์ฐจ๋ฅผ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ–๋Š” ์žฅ์  ์ค‘ ํ•˜๋‚˜์ธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค๋Š” ์ ์ด ์ด ๋ถ€๋ถ„์—์„œ ๋“œ๋Ÿฌ๋‚˜๊ฒŒ ๋œ๋‹ค.

ํ•ธ๋“ค์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์–ด๋– ํ•œ ์ž๋™์ฐจ์—์„œ ๊ฐ€์ ธ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ค์–ด๊ฐ„๋‹ค. 


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

  • ์ถ”์ƒํ™”
    • ๊ฐ์ฒด์—์„œ ๊ณตํ†ต๋œ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ
    • ์‹ค์ œ ์„ธ์ƒ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค๋งŒ ๊ฐ€์ ธ์™€์„œ ๋‹จ์ˆœํ™” ํ•˜๋Š” ๊ฒƒ.
    • ์‹ค์ œ๋ฅผ ๊ฐ์ฒดํ™” ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”ํ•œ ์ •๋ณด๋“ค๋กœ ๊ฐ„์†Œํ™” ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ง€ํ•˜์ฒ ์˜ ๋…ธ์„ ๋„๊ฐ€ ๊ทธ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
    • ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ์ถ”์ƒํ™”๋Š” ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋Š” ์ˆจ๊ธฐ๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ์„ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

์ถ”์ƒํ™”๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

  • 'ํ˜„๋Œ€'์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž๋™์ฐจ ๋ธŒ๋žœ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋•Œ ์ถ”์ƒํ™”๋กœ '์ž๋™์ฐจ'๋ฅผ ๊ตฌํ˜„ ํ•ด๋†“์œผ๋ฉด ๋‹ค๋ฅธ ๊ณณ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

  • ์บก์Šํ™”
    • ๋ฐ์ดํ„ฐ๋ฅผ ์€๋‹‰ํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ (์ ‘๊ทผ ์ œ์–ด์ž ํ™œ์šฉ)
์ ‘๊ทผ ์ œ์–ด ์ง€์‹œ์ž
public : ๋ชจ๋‘๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ
protected : ์ƒ์† / ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
private : ๋ณธ์ธ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

  • ์ƒ์†์„ฑ
    • ์ƒ์†์ด๋ž€ ์ƒ์œ„๊ฐœ๋…์˜ ํŠน์ง•์„ ํ•˜์œ„ ๊ฐœ๋…์ด ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠน์ง• (๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ)๋“ค์„ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค์ฃผ๊ณ ์ž ํ•  ๋•Œ ์ƒ์†์˜ ํŠน์ง•์„ ์‚ฌ์šฉํ•œ๋‹ค.
- ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ฆ๋Œ€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. -> ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋˜ ๊ตฌํ˜„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
- ์ข€ ๋” ํญ๋„“๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. -> ์ƒ์† ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
์žฅ์  ๋‹จ์ 
- ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.
- ๋ฒ”์šฉ์ ์ธ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
- ์ž๋ฃŒ์™€ ๋ฉ”์„œ๋“œ์˜ ์ž์œ ๋กœ์šด ์‚ฌ์šฉ ๋ฐ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
- ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ ์ง„๋‹ค.
- ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ƒ์†์ด ์ž˜๋ชป ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹คํ˜•์„ฑ
    • ๋‹คํ˜•์„ฑ์€ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)
- ๊ฐ™์€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ / ๊ฐ™์€ ์ธ์ž ๋ชฉ๋ก / ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•œ๋‹ค. 
- ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์—์„œ ์ž๋™์œผ๋กœ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ค€๋‹ค. 
์˜ค๋ฒ„๋กœ๋”ฉ(Overroding)
- ๊ฐ™์€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ / ๋‹ค๋ฅธ ์ธ์ž ๋ชฉ๋ก / ๋‹ค์ˆ˜์˜ ๋ฉ”์„œ๋“œ ์ค‘๋ณต์„ ์ •์˜


๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ๋‹จ์ 

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

 

  • ๋‹จ์ 
    • ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆผ
    • ๊ฐ์ฒด์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์šฉ๋Ÿ‰์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
    • ์„ค๊ณ„์‹œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”

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

๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด SOLID ๋ผ ๋ถˆ๋ฆฌ๋Š” 5๊ฐ€์ง€ ์›์น™์ด ์žˆ๋‹ค.

 

  1.  ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP, Single Responsibility Principle)
    • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•œ ์ฑ…์ž„ ๋ณ€๊ฒฝ์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฑ…์ž„๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  2. ๊ฐœ๋ฐฉ-ํ์‡  ์›์น™ (OCP, Open/Closed Principle)
    • ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  3. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP, Liskov Substitution Principle)
    • ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์น˜ํ™˜ํ•ด๋„, ์ƒ์œ„ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
  4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP, Interface Segregation Principle)
    • ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ์žˆ์–ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  5. ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (DIP, Dependency Inversion Principle)
    • ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ์ง€ ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ  ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒ ํƒ€์ž…์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.