OOP


๐Ÿ’ก OOP

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ค‘

ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ 

๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ด๋‹ค.



๐Ÿ”Ž OOP์˜ 5๊ฐ€์ง€ ์›์น™

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

โ‡จ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ชฉ์ ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ด์œ ์—ฌ์•ผ ํ•œ๋‹ค.

๏ผ’. Open-Closed-Principle (๊ฐœ๋ฐฉ ํ์‡  ์›์น™)

โ‡จ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ๊ณผ ์ถ”๊ฐ€์—๋Š” ๊ฐœ๋ฐฉ๋˜์ง€๋งŒ, ์ˆ˜์ •๊ณผ ์‚ญ์ œ์—๋Š” ๋‹ซํ˜€์žˆ๋‹ค๋Š” ์›์น™.

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

โ‡จ ์ž์‹ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

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

โ‡จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๋ฒ•์น™

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

โ‡จ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ๋Š”, ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ ๋ณด๋‹ค๋Š” ๋ณ€ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์„ ์ง€ํ–ฅํ•ด์•ผ ๋œ๋‹ค.



๐Ÿ”Ž ์žฅ์ 

๏ผ‘. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ด

  • ๋‚จ์ด ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ƒ์†์„ ํ†ตํ•ด ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๏ผ’. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€

  • ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•  ๋•Œ ์ผ์ผ์ด ์ฐพ์•„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ํ˜น์€ ๋ฉ”์„œ๋“œ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

๏ผ“. ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ

  • ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ชจ๋“ˆํ™” ์‹œ์ผœ์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๋ช…, ์—ฌ๋ŸฌํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœ์ด ํ•„์š”ํ•  ์‹œ ์—…๋ฌด ๋ถ„๋‹ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

๐Ÿ”Ž ๋‹จ์ 

๏ผ‘. ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆผ

๏ผ’. ๊ฐ์ฒด๊ฐ€ ๋งŽ์œผ๋ฉด ์šฉ๋Ÿ‰์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Œ

๏ผ“. ์„ค๊ณ„์‹œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”



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

๏ผ. ํด๋ž˜์Šค + ์ธ์Šคํ„ด์Šค (๊ฐ์ฒด)

ํด๋ž˜์Šค๋ž€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”๋ฅผ ๊ฑฐ์ณ

์ง‘๋‹จ์— ์†ํ•˜๋Š” ์†์„ฑ(attribute)๊ณผ ํ–‰์œ„(behavior)๋ฅผ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•œ ๊ฒƒ.

์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ž€ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ํ• ๋‹น๋œ ๊ฒƒ์œผ๋กœ

์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ


๏ผ‘. ์ถ”์ƒํ™”

  • ๋ชฉ์ ๊ณผย ๊ด€๋ จ์ดย ์—†๋Š”ย ๋ถ€๋ถ„์„ย ์ œ์™ธํ•ด์„œย ํ•„์š”ํ•œย ๋ถ€๋ถ„์„ย ํฌ์ฐฉํ•˜๋Š”ย ๊ธฐ๋ฒ•
  • ๊ฐ์ฒด์˜ย ๊ณตํ†ต๋œ ์†์„ฑ๋“ค ์ค‘ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ํฌ์ฐฉํ•ด์„œ ํด๋ž˜์Šค๋กœย ์ •์˜ํ•˜๋Š”ย ์„ค๊ณ„ย ๊ธฐ๋ฒ•
  • ๊ตฌ์ฒด์ ์ธย ์‚ฌ๋ฌผ๋“ค์˜ย ๊ณตํ†ต์ ์ธย ํŠน์ง•์„ย ํŒŒ์•…ํ•ด์„œย ์ด๋ฅผย ํ•˜๋‚˜์˜ย ๊ฐœ๋…(์ง‘ํ•ฉ)์œผ๋กœย ๋‹ค๋ฃจ๋Š”ย ๊ฒƒ

๏ผ’. ์บก์Šํ™”

  • ์™ธ๋ถ€์—ย ๋…ธ์ถœํ• ย ํ•„์š”๊ฐ€ย ์—†๋Š”ย ์ •๋ณด๋“ค์€ย ์€๋‹‰ย (์ •๋ณด์€๋‹‰)
  • ์ •๋ณดย ์€๋‹‰(informationย hiding):ย ํ•„์š”๊ฐ€ย ์—†๋Š”ย ์ •๋ณด๋Š”ย ์™ธ๋ถ€์—์„œย ์ ‘๊ทผํ•˜์ง€ย ๋ชปํ•˜๋„๋กย ์ œํ•œํ•˜๋Š”ย ๊ฒƒ
  • ๋†’์€ย ์‘์ง‘๋„,ย ๋‚ฎ์€ย ๊ฒฐํ•ฉ๋„๋ฅผย ์œ ์ง€ํ•˜์—ฌย ์œ ์—ฐํ•จ๊ณผย ์œ ์ง€๋ณด์ˆ˜์„ฑย ์ฆ๊ฐ€
  • ex) ๋งˆํŠธ์—์„œ ๊ตฌ๋งค์ž๋Š” ์ƒํ’ˆ๋ช…๊ณผ ๊ฐ€๊ฒฉ๋งŒ ์•Œ๋ฉด๋  ๋ฟ, ๋’ค์— ์›์žฌ๋ฃŒ์™€ ์žฌ์งˆ๊ฐ ์ข… ๋‹ค์–‘ํ•œ ์ •๋ณด๋Š” ๋ชฐ๋ผ๋„ ๋œ๋‹คย ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ณด์—ฌ์ฃผ๊ฒŒ๋” ์„ค๊ณ„ํ•ด์•ผ ๋œ๋‹ค๋Š” ์˜๋ฏธ

๏ผ“. ์ƒ์†ํ™”

  • ๋ถ€๋ชจย ํด๋ž˜์Šค๊ฐ€ย ์ž์†ย ํด๋ž˜์Šค์—๊ฒŒย ์†์„ฑ์„ย ๋ฌผ๋ ค์ฃผ๋Š”ย ๊ฒƒ
  • ์ฝ”๋“œ์˜ย ์žฌ์‚ฌ์šฉ
  • ์—ฌ๋Ÿฌย ๊ฐœ์ฒด๋“ค์ดย ๊ฐ€์ง„ย ๊ณตํ†ต๋œย ํŠน์„ฑ์„ย ๋ถ€๊ฐ์‹œ์ผœย ํ•˜๋‚˜์˜ย ๊ฐœ๋…์ด๋‚˜ย ๋ฒ•์น™์œผ๋กœย ์„ฑ๋ฆฝ์‹œํ‚ค๋Š”ย ๊ณผ์ •

๏ผ”. ๋‹คํ˜•ํ™”ย 

  • ๊ฐ™์€ ํ˜•ํƒœ์ด์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ(์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‚จ์—ฌ์˜ ์„ฑ๋ณ„)
  • ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Šฅ๋ ฅ
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) ์€ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉ
  • ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) ์€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํ˜•๊ณผ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ