TIL/For Interview

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

"์œ ๋‹ˆ" 2023. 5. 16. 20:23

 

๐Ÿง˜๐Ÿป‍โ™€๏ธ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? 

์•„์ง ๋ฉด์ ‘์„ ๋ณธ ์  ์—†์ง€๋งŒ,, ๋ฉด์ ‘ ๋‹จ๊ณจ ์งˆ๋ฌธ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. 

 

 

์šฐ์„  ๊ฐ์ฒด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? 

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

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

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

 

์˜ˆ๋ฅผ ๋“ค์–ด '๋„์„œ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ'์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. 

์ด๋ฅผ ๊ฐ์ฒด์ง€ํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ์ฑ…์˜ ์ œ๋ชฉ, ์ €์ž, ํŽ˜์ด์ง€์ˆ˜์™€ ๊ฐ™์€ ์ž๋ฃŒํ˜• ํ•„๋“œ์™€ ๋Œ€์ถœํ•˜๊ธฐ, ๋ฐ˜๋‚ฉํ•˜๊ธฐ ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฑ…์ด๋ผ๋Š” ๊ฐ์ฒด์— ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ถ”์ƒ์ ์ด์—ˆ๋˜ ๋™์ž‘๋„ ์ง๊ด€์ ์œผ๋กœ ๋ณด์ด๊ฒŒ ๋˜์–ด ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ ๊ฐ์ฒด ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์ด ๋šœ๋ ทํ•˜๊ฒŒ ์ƒ๊ธฐ๊ณ , ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค. 

 

 

 

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

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํฌ๊ฒŒ ์ถ”์ƒํ™”, ์บก์Šํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ์˜ ๋„ค๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. 

 

 

 

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

๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ๋™์ž‘์„ ํ•˜๋‚˜๋กœ ์ถ”์ถœํ•ด๋‚ด๋Š” ์ž‘์—… 

์˜ˆ๋ฅผ๋“ค์–ด '์ž๋™์ฐจ'๋ผ๋Š” ์ถ”์ƒํ™” ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ , ์ž๋™์ฐจ๋“ค์ด ๊ฐ€์ง„ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ๋งŒ๋“ค์–ด์„œ ํ™œ์šฉํ•œ๋‹ค. 

 

'์ฐฝ๋ฌธ์ด ์žˆ๋‹ค, ๋„ค๊ฐœ์˜ ๋ฐ”ํ€ด, ์—ฐ๋ฃŒ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค' ๋“ฑ๋“ฑ์ด ๊ณตํ†ต์  ํŠน์ง•์ด ๋  ์ˆ˜ ์žˆ๊ณ , 

'ํ›„์ง„์„ ํ•  ์ˆ˜ ์žˆ๋‹ค' ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

2. ์บก์Šํ™” (Encapsulation)

์ •๋ณด ์€๋‹‰ํ™”๋ฅผ ํ†ตํ•ด ๋†’์€ ์‘์ง‘๋„, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ 

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ํ•œ ๊ณณ์—์„œ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ํšจ๊ณผ๋ฅผ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

์บก์Šํ™”๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋จน๋Š” ์•Œ์•ฝ์„ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋œ๋‹ค. ์•Œ์•ฝ์„ ๋จน์„ ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•ฝ์˜ ์„ฑ๋ถ„์ด๊ณ , ์•ฝ์˜ ๋ง›์ด๋‚˜ ์‹๊ฐ์„ ์บก์Š ์†์œผ๋กœ ์ˆจ๊ธฐ๋Š” ๊ฒƒ. ์ด๋ ‡๊ฒŒ ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ์„ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์„ ์ •๋ณด ์€๋‹‰์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

 

3. ์ƒ์†

์—ฌ๋Ÿฌ ๊ฐœ์ฒด๋“ค์ด ์ง€๋‹Œ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ถ€๊ฐ์‹œ์ผœ ํ•˜๋‚˜์˜ ๋ฒ•์น™์œผ๋กœ ์„ฑ๋ฆฝํ•˜๋Š” ๊ณผ์ •

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

 

์ด๋ ‡๊ฒŒ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ํŠน์ง•์„ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ ๊ตฌํ˜„๋œ ์„ธ๋ถ€ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ 

์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ ๋ช…๋ฐฑํ•œ ๋‹จ์ ๋„ ์กด์žฌ(์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ต๋‹ค, ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค์˜ ์ฆ๊ฐ€, ์ƒ์†์ด ์ž˜๋ชป ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค)ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

์ƒ์†์€ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜์˜ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

- is-A ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•  ๋•Œ

- ์žฌ์‚ฌ์šฉ X, ๊ธฐ๋Šฅ์˜ ํ™•์žฅ ๊ด€์  O

 

์žฌ์‚ฌ์šฉ์ด ์•„๋‹Œ ๊ธฐ๋Šฅ ํ™•์ •์˜ ๊ด€์ ์€ ๋ง๊ทธ๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉด ๋˜๊ณ , is-A ๊ด€๊ณ„๋ž€ [~์€~์ด๋‹ค] ๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ด€๊ณ„์ด๋‹ค. (์˜ˆ๋ฅผ๋“ค๋ฉด ์‚ฌ๊ณผ๋Š” ๊ณผ์ผ์ด๋‹ค.) ์ฆ‰, ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฌธ์žฅ์ด ์žˆ์„ ๋•Œ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒดํ•˜์—ฌ๋„ ์˜๋ฏธ๊ฐ€ ์„ฑ๋ฆฝ๋˜์–ด์•ผ ํ•œ๋‹ค. 

 

 

4. ๋‹คํ˜•์„ฑ (polymorphism)

๋‹คํ˜•์„ฑ์€ '์—ฌ๋Ÿฌ ํ˜•ํƒœ๊ฐ€ ์กด์žฌํ•œ๋‹ค'๋ผ๋Š” ๋œป์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋‹คํ˜•์„ฑ์ด๋ž€ ํ•˜๋‚˜์˜ ์†์ƒ์ด๋‚˜ ํ–‰์œ„๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ์˜๋ฏธ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์„ ๋งํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์€ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์•„์ฃผ ์ค‘์š”ํ•˜๊ณ , ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 

 

์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋™์ž‘ ์ˆ˜ํ–‰ ๋ช…๋ น์„ ๋ฐ›์•˜์„ ๋•Œ, ๊ฐ์ž์˜ ํŠน์„ฑ์— ๋งž๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ 

์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ , ์œ ์—ฐํ•จ์„ ๊ฐ–๊ฒŒ ํ•ด์ค€๋‹ค. 

 

์ฆ‰ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding), ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉ : ์ƒ์œ„ ํด๋ž˜์„œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

์˜ค๋ฒ„๋กœ๋”ฉ: ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜ํ•˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ