๐ŸŒฑ → ๐ŸŒณ

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

Server/Java & Spring

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

BAY 2023. 5. 31. 11:30
728x90

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

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ: OOP(Object Oriented Programing)

์ ˆ์ฐจ์ง€ํ–ฅ์  -> ๊ฐ์ฒด์ง€ํ–ฅ์ 

๊ฐ์ฒด: ๋Œ€์ƒ (๋ถ•์–ด๋นต)ํด๋ž˜์Šค: ๊ณตํ†ต๋œ ์†์„ฑ๋“ค์˜ ์ •์˜ (๋ถ•์–ด๋นต ํ‹€) OOP: ๊ฐ์ฒด๋“ค์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

OOP์˜ 4๊ฐ€์ง€ ํŠน์ง•

  • ์ถ”์ƒํ™”
    • ์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต๋œ ํŠน์ง•์„ ํŒŒ์•…ํ•ด ์ •์˜ํ•ด ๋†“์€ ์„ค๊ณ„ ๊ธฐ๋ฒ•
    • ๋ชฉ์ ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์ด๋‹ค.
  • ์บก์Šํ™”
    • ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ทธ ๊ฐ์ฒด๊ฐ€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ
    • ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ์ถœ ์ˆ˜ ์žˆ์Œ: ์ •๋ณด์€๋‹‰(private)
  • ์ƒ์†
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ์„ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฌผ๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    • ๋‹จ์ผ ์ƒ์† (๋‹ค์ค‘ ์ƒ์†์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชฉ์ ์€ ์•„๋‹ˆ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘์ƒ์† ๊ธฐ๋Šฅ ๊ฐ€๋Šฅ)
    • ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์—†์• ๊ธฐ ์œ„ํ•จ: ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ
  • ๋‹คํ˜•์„ฑ
    • ๋‹คํ˜•์„ฑ์€ ํ˜•ํƒœ๊ฐ€ ๊ฐ™์€๋ฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) ex) System.out.println()์—๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™
    • ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding): ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜
    • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค(Funtional Interface)

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

OOP(Object-Oriented Programming, ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์ด๋ž€?[OOP] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)์ด๋ž€?๋‹คํ˜•์„ฑ(Polymorphism)์ด๋ž€?

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5์›์น™ S.O.L.I.D

  • SRP(Single Responsibility Principle): ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
    • ํด๋ž˜์Šค(๊ฐ์ฒด)๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์›์น™
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์œ ์ง€๋ณด์ˆ˜ ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๊ธฐ๋ฒ•
  • OCP(Open Closed Priciple): ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™
    • ํ™•์žฅ์— ์—ด๋ ค์žˆ์–ด์•ผ ํ•˜๋ฉฐ(์‰ฝ๊ฒŒ), ์ˆ˜์ •(๋ณ€๊ฒฝ)์—๋Š” ๋‹ซํ˜€(์ตœ์†Œ)์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
    • ์ถ”์ƒํ™” ์‚ฌ์šฉ์„ ํ†ตํ•œ ๊ด€๊ณ„ ๊ตฌ์ถ•์„ ๊ถŒ์žฅ
    • ๋‹คํ˜•์„ฑ๊ณผ ํ™•์žฅ์ด๋ผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์„ค๊ณ„ ์›์น™
  • LSP(Listov Substitution Priciple): ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ–‰๋™ ๊ทœ์•ฝ์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์œ„๋ฐ˜ํ•˜๋ฉด ์•ˆ ๋จ
  • ISP(Interface Segregation Principle): ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
    • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•œ๋ฒˆ ๊ตฌ์„ฑํ•˜์˜€์œผ๋ฉด ์™œ๋งŒํ•ด์„  ๋ณ€ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ •์ฑ… ๊ฐœ๋…
  • DIP(Dependency Inversion Principle): ์˜์กด ์—ญ์ „ ์›์น™
    • ์ฐธ์กฐํ•˜๋ ค๋Š” ๋Œ€์ƒ์˜ ์ƒ์œ„ ์š”์†Œ(์ถ”์ƒ ํด๋ž˜์Šค or ์ธํ„ฐํŽ˜์ด์Šค)๋กœ ์ฐธ์กฐ
    • ๊ฐ ํด๋ž˜์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„(coupling)์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ

[OOP] ๐Ÿ’  ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ - S.O.L.I.D

728x90