๋ฐฑ์—”๋“œ(Back-End) ๊ฐœ๋ฐœ/Java

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

rabo93 2025. 1. 16. 00:42
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ์ด๋ž€ ?

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object-Oriented Programming, OOP)์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•.

(์ฐธ๊ณ ๋กœ, ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ์ˆœ์ฐจ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”์‹œ๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ๋งŒ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘์„ ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ € ํ˜•ํƒœ๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)

๊ฑฐ๊ธฐ์„œ ๋˜, ๊ฐ์ฒด(๋˜๋Š” ํด๋ž˜์Šค)๋ž€? 

 

ํด๋ž˜์Šค : ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”๋ฅผ ๊ฑฐ์ณ ์ง‘๋‹จ์— ์†ํ•˜๋Š” ์†์„ฑ(attribute)๊ณผ ํ–‰์œ„๋ฅผ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•œ ๊ฒƒ

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

 

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

 

1. ์ถ”์ƒํ™” (Abstraction)

   : ๊ฐ์ฒด๋“ค๋ผ๋ฆฌ ๊ณตํ†ต์ ์ธ ํŠน์ง•(๊ธฐ๋Šฅ, ์†์„ฑ)์„ ์ถ”์ถœํ•˜์—ฌ ์ •์˜. ์ฆ‰, ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ.

     ex) ๊ฐ์ฒด1(์‚ผ์„ฑํฐ), ๊ฐ์ฒด2(์•„์ดํฐ), ๊ฐ์ฒด3(LGํฐ)... => ํด๋ž˜์Šค(ํœด๋Œ€ํฐ)

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

2. ์ƒ์† (Ingeritance)

   : ์ด๋ฏธ ์ •์˜๋œ ์ƒ์œ„ ํด๋ž˜์Šค(๋ถ€๋ชจํด๋ž˜์Šค)์˜ ๋ชจ๋“  ์†์„ฑ๊ณผ ์—ฐ์‚ฐ์„ ํ•˜์œ„ ํด๋ž˜์Šค(์ž์‹ํด๋ž˜์Šค)๊ฐ€ ๋ฌผ๋ ค๋ฐ›์Œ.

     ๊ธฐ์กด ์ฝ”๋“œ ์žฌํ™œ์šฉ, ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ. ์ƒ์‚ฐ์„ฑ ๋†’์ž„.

3. ๋‹คํ˜•์„ฑ (Polymorphism)

   : ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘. ๊ฐ์ž ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด์— ์˜์กด.

     ex) ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ

4. ์บก์Аํ™” (Encapsultation)

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

     ex) ์ ‘๊ทผ ์ œํ•œ์ž private

  

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

 

JAVA, Python, C++, C# ..

 

์žฅ์ ๊ณผ ๋‹จ์ 

 

์žฅ์  : ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ. ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์— ์šฉ์ด. 

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

 

 

getter, setter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

 

getter, setter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ™์ด ์–ด๋–ค ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์‚ฌ์ „์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.


์œ ํŠœ๋ธŒ ๋ณด๋‹ค๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋… ์ฐธ๊ณ !!

์ถœ์ฒ˜:  ์œ ํŠœ๋ธŒ ์ฝ”๋”ฉํ•˜๋Š”๊ฑฐ๋‹ˆ

 

 

https://rabo93.tistory.com/37

 

์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? (๋‹คํ˜•์„ฑ.. SOLID ์›์น™..)

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค! * ์ž๋ฐ” ์–ธ์–ด์˜ ๋‹คํ˜•์„ฑ(Polymorphism)- ์—ญํ• ๊ณผ ๊ตฌํ˜„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด๋ณด์žex) ์šด์ „์ž - ์ž๋™์ฐจ์šด์ „์ž๋Š” ์ž๋™์ฐจ์˜ ์ข…๋ฅ˜๊ฐ€ ๋ฐ”๊ปด๋„ ์šด์ „์„

rabo93.tistory.com