๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/JavaScript

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object Oriented Programming)

๋ฐ˜์‘ํ˜•

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

 Java, C++, C# ๋“ฑ ํ˜„๋Œ€์˜ ์–ธ์–ด๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์‹ค์„ธ๊ณ„์— ์กด์žฌํ•˜๊ณ  ์ธ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด(Object)๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ธ๊ณ„์—์„œ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์˜ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋… ๋˜๋Š” ๊ธฐ๋Šฅ๋งŒ์„ ์ถ”์ถœํ•˜๋Š” ์ถ”์ƒํ™”(abstraction)๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ๋งํ•˜๋ ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋งํ•œ๋‹ค.

 

 ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ ํ˜น์€ ๋‹จ์ˆœํ•œ ์ปดํ“จํ„ฐ์˜ ๋ช…๋ น์–ด๋“ค์˜ ๋ชฉ๋ก์ด๋ผ๋Š” ์ „ํ†ต์ ์ธ ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ๋Š” ๋‹ค๋ฅธ, ๊ด€๊ณ„์„ฑ์žˆ๋Š” ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๋Š” ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

 

 ๊ฐ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๋˜๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ ๊ฐ์ฒด๋Š” ๋ณ„๋„์˜ ์—ญํ• ์ด๋‚˜ ์ฑ…์ž„์„ ๊ฐ–๋Š” ์ž‘์€ ๋…๋ฆฝ์ ์ธ ๊ธฐ๊ณ„ ๋˜๋Š” ๋ถ€ํ’ˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ์„œ๋„ ์œ ๋ฆฌํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋„๋ก ์˜๋„๋˜์—ˆ๊ณ , ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

โž• ๐Ÿ‘€ ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” C, Pascal, Fortran ๋“ฑ์ด ์žˆ๋‹ค. 

 

• JavaScript๋Š” ๋ช…๋ นํ˜•(imperative), ํ•จ์ˆ˜ํ˜•(functional), ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜(prototype-based)์˜ ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด๋กœ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจํ„ด์œผ๋กœ ์œผ๋กœ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

• JavaScript๋Š” ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์†, ์บก์Šํ™”(์ •๋ณด ์€๋‹‰) ๋“ฑ์˜ ๊ฐœ๋…์€ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ๊ณผ ํด๋กœ์ € ๋“ฑ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋น„๊ต

  ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํŠน์ง• ์ปดํ“จํ„ฐ ์ฒ˜๋ฆฌ๊ตฌ์กฐ์™€ ์œ ์‚ฌ ์‚ฌ๋žŒ์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์— ๊ฐ€๊นŒ์›€
๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ ์ ์Œ ๋งŽ์Œ
์ฒ˜๋ฆฌ์†๋„ ๋น ๋ฆ„ ๋Š๋ฆผ
์žฌํ™œ์šฉ์„ฑ ๋‚ฎ์Œ ๋†’์Œ
์ฝ”๋“œ์ดํ•ด ์–ด๋ ค์›€ ์‰ฌ์›€
๋””๋ฒ„๊น… ์–ด๋ ค์›€ ์‰ฌ์›€

 

๐Ÿ‘พ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ๊ฐœ๋…๊ณผ ํŠน์ง• (OOP Basic Concepts)

 ์บก์Šํ™”, ์ƒ์†, ์ถ”์ƒํ™”, ๋‹คํ˜•์„ฑ

โœ”๏ธ Encapsulation(์บก์Šํ™”)

 ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

 

 • ์€๋‹‰ํ™”(hiding): ์€๋‹‰ํ™”๋Š” ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋‚˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ, ๋””ํ…Œ์ผํ•œ ๊ตฌํ˜„์ด๋‚˜ ๋ฐ์ดํ„ฐ๋Š” ์ˆจ๊ธฐ๊ณ  ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ํ•„์š”ํ•œ ๋™์ž‘(๋ฉ”์„œ๋“œ)๋งŒ ๋…ธ์ถœ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์€๋‹‰ํ™”์˜ ํŠน์ง•์„ ์‚ด๋ ค์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ์ฒด ๋‚ด ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๋งŒ ์ˆ˜์ •ํ•˜๊ณ , ๋…ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ํ๋ฆ„์€ ๋ฐ”๋€Œ์ง€ ์•Š๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (์ ˆ์ฐจ์  ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๊ฐ€ ๋ฐ”๋€” ๋•Œ์— ์ฝ”๋“œ์˜ ํ๋ฆ„์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜์–ด ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค. ๊ทธ๋ž˜์„œ ๋” ์—„๊ฒฉํ•œ ํด๋ž˜์Šค๋Š” ์†์„ฑ์˜ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ๋ง‰๊ณ , ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜(setter), ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜(getter)๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ๋‚˜๋ˆ„๊ธฐ๋„ ํ•œ๋‹ค.)

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

 

โœ”๏ธ Inheritance (์ƒ์†)

 ๊ธฐ๋ณธ ํด๋ž˜์Šค(base class)์˜ ํŠน์ง•์„ ํŒŒ์ƒ ํด๋ž˜์Šค(derived class)๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ, ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

 ์ƒ์†์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์˜ ์š”๊ตฌ์— ๋งž๊ฒŒ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํด๋ž˜์Šค ๊ฐ„์˜ ์ข…์† ๊ด€๊ณ„๋ฅผ ํ˜•์„ฑํ•จ์œผ๋กœ์จ ๊ฐ์ฒด์˜ ๊ด€๊ณ„๋ฅผ ์กฐ์งํ™”ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ง์ ‘ ์ƒ์†๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

โœ”๏ธ Abstraction (์ถ”์ƒํ™”)

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

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

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

 

โœ”๏ธ Polymorphism (๋‹คํ˜•์„ฑ)

 ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ผ๋„ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์œผ๋กœ ์ธํ•ด ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ์ฒด ํŠน์„ฑ์— ๋งž๊ฒŒ ๋‹ค๋ฅธ ์ž‘๋™์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 


โœ๏ธ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ •๋ณด๋‚˜ ๋” ๊ณต์œ ํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

๋ฐ˜์‘ํ˜•