๊ฐœ๋…์ •๋ฆฌ/JavaScript

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

imKion 2022. 7. 22. 17:32

๐Ÿ’ก ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(object-oriented programming)
ํ”„๋กœ๊ทธ๋žจ์„ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์™€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜๋งŽ์€ '๊ฐ์ฒด(object)'๋ผ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ  ์ด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์„œ์ˆ ํ•˜๋Š” ๋ฐฉ์‹

๊ฐ์ฒด๋ž€? ํ•˜๋‚˜์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” '๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)'์˜ ๋ฌถ์Œ

 

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


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

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด๊ฒƒ์„ ์ƒํ–ฅ์‹(Bottom-up) ํ•ด๊ฒฐ๋ฒ•์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ๋‹ค. ์ž‘์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋งŒ๋“  ๋’ค, ์ด ๊ฐ์ฒด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ฐ์ฒด๋ž€ ๊ฒƒ์„ ์ผ๋‹จ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด ๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ๊ทธ ์ดํ›„์—” ๊ทธ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋Œ€ํญ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

์ถœ์ฒ˜: ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

์ž๋™์ฐจ์—๋Š” ์ƒ‰์ƒ, ๊ฐ€๊ฒฉ, ์†๋ ฅ๊ณผ ๊ฐ™์€ ๊ณ ์œ ์˜ ์†์„ฑ์ด ์žˆ๋‹ค.

ํ•œํŽธ ์‹œ์ž‘, ํ›„์ง„, ์ „์ง„, ๋ฉˆ์ถค๊ณผ ๊ฐ™์ด ์ž๋™์ฐจ์˜ ๊ธฐ๋Šฅ์ด ๋ฉ”์„œ๋“œ๋กœ ์กด์žฌํ•œ๋‹ค.

 

์ฃผ์š” ๊ฐœ๋…


OOP basic concepts

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ํฌ๊ฒŒ ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์บก์Аํ™”_Encapsulation

์บก์Аํ™”๋Š” ์™ธ๋ถ€์—์„œ ์•ž์„œ ๋งํ–ˆ๋˜ ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)์„ ๋”ฐ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์•ˆ์— ๋„ฃ์–ด์„œ ๋ฌถ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)๋“ค์€ ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

๋А์Šจํ•œ ๊ฒฐํ•ฉ์€ ์ฝ”๋“œ ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ ˆ์ฐจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฝ”๋“œ๊ฐ€ ์ƒ์ง•ํ•˜๋Š” ์‹ค์ œ ๋ชจ์Šต๊ณผ ๋‹ฎ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ex) ํ‚ค๋ณด๋“œ
ํ‚ค๋ณด๋“œ์˜ ์†์„ฑ: ํฐ์ƒ‰, ์‚ฌ๊ฐํ˜•, ๋ฒ„ํŠผ
ํ‚ค๋ณด๋“œ์˜ ๊ธฐ๋Šฅ: ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค

์บก์Аํ™”๋ผ๋Š” ๊ฐœ๋…์€ "์€๋‹‰ํ™”"์˜ ํŠน์ง•๋„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”๋ฐ,

์€๋‹‰ํ™”๋Š” ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋‚˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋””ํ…Œ์ผํ•œ ๊ตฌํ˜„์ด๋‚˜ ๋ฐ์ดํ„ฐ๋Š” ์ˆจ๊ธฐ๊ณ , ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ํ•„์š”ํ•œ ๋™์ž‘(๋ฉ”์„œ๋“œ)๋งŒ ๋…ธ์ถœ์‹œํ‚ต๋‹ˆ๋‹ค.

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


์ถ”์ƒํ™”_Abstraction

์ถ”์ƒํ™”๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์•„์ฃผ ๋ณต์žกํ•œ๋ฐ, ์‹ค์ œ๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

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

์บก์Аํ™”๊ฐ€ ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ์žˆ๋‹ค๋ฉด, ์ถ”์ƒํ™”๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ , ๋‹จ์ˆœํ•œ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.


์ƒ์†_Inheritance

์ƒ์†์€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ(Human)์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฆ„๊ณผ ์„ฑ๋ณ„, ๋‚˜์ด์™€ ๊ฐ™์€ ์†์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋จน๋‹ค, ์ž๋‹ค ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ํ•™์ƒ(Student)์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ์•ž์„œ ๊ตฌํ˜„ํ–ˆ๋˜ ์‚ฌ๋žŒ(Human) ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•™์ƒ์˜ ๋ณธ์งˆ์€ ๊ฒฐ๊ตญ ์‚ฌ๋žŒ์ด๋ฏ€๋กœ, ์ƒ์†์„ ์ด์šฉํ•˜์—ฌ ํ•™์ƒ(Student) ํด๋ž˜์Šค๋Š” ์‚ฌ๋žŒ(Human) ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•™์ƒ์€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•™์Šต ๋‚ด์šฉ, ๊ณต๋ถ€ํ•˜๋‹ค ์™€ ๊ฐ™์€ ์†์„ฑ/๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.


๋‹คํ˜•์„ฑ_Polymorphism

Polymorphism์ด๋ผ๋Š” ๋‹จ์–ด์˜ poly๋Š” "๋งŽ์€", ๊ทธ๋ฆฌ๊ณ  morph๋Š” "ํ˜•ํƒœ"๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ "๋‹ค์–‘ํ•œ ํ˜•ํƒœ"๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ•˜์œ„ ํƒ€์ž…๋“ค์€ ๊ฐ™์€ ์ƒ์œ„ ํƒ€์ž…์—์„œ ์ƒ์†์ด ๋˜์—ˆ์–ด๋„ ๊ฐ๊ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ •๋ฆฌ


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

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