Object Oriented Programming
1. ๊ฐ์ฒด ์งํฅ์ด๋
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์ ๋ฌถ์ด ์ฒ๋ฆฌํจ
์์ฑ๊ณผ ๋ฉ์๋๊ฐ ํ๋์ '๊ฐ์ฒด' ๋ผ๋ ๊ฐ๋ ์ ํฌํจ๋๋ฉฐ, ์ด๋ JavaScript ๋ด์ฅ ํ์ object์๋ ๋ค๋ฅด๊ฒ, class๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋์ ๋ชจ๋ธ์ด ๋๋ ์ฒญ์ฌ์ง(blueprint)์ ๋ง๋ค๊ณ โ class
์ด๋ ๋ชจ๋ธ์ ์ฒญ์ฌ์ง์ ๋ง๋ค ๋ ์ฐ๋ ์ํ๊ฐ์ฒด(original form) โ prototype
๊ทธ ์ฒญ์ฌ์ง์ ๋ฐํ์ผ๋ก ํ ๊ฐ์ฒด(object)๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋๋ฐ ํจํด โ instance
2. ํด๋์ค ๋ชจ๋ ํจํด
๋ฉ์๋ ํธ์ถ
ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด ์์ฑํ๊ธฐ
3. ํด๋์ค์ ์ธ์คํด์ค
ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฌธ๋ฒ: class ํค์๋
ํด๋์ค์ ์ธ์คํด์ค ๋ง๋ค๊ธฐ
this: ์ธ์คํด์ค ๊ฐ์ฒด
parameter๋ก ๋์ด์จ ๋ธ๋๋, ์ด๋ฆ, ์์ ๋ฑ์ ์ธ์คํด์ค ์์ฑ ์ ์ง์ ํ๋ ๊ฐ
this์ ํ ๋นํ๋ค๋ ๊ฒ์ ๋ง๋ค์ด์ง ์ธ์คํด์ค์ ํด๋น ํด๋น ๋ธ๋๋, ์ด๋ฆ, ์์์ '๋ถ์ฌ'ํ๊ฒ ๋ค๋ ์๋ฏธ
ํจ์๊ฐ ์คํ๋ ๋ ํด๋น scope๋ง๋ค ์์ฑ๋๋ ๊ณ ์ ํ ์คํ context
new ํค์๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ ๋๋ ํด๋น ์ธ์คํด์ค๊ฐ ๋ฐ๋ก this ๊ฐ์ด ๋จ
๋ฉ์๋ ์ ์
์์ฑ์ ํจ์์ ํจ๊ป class ํค์๋ ์์ชฝ์ ๋ฌถ์ด์ ์ ์
์ธ์คํด์ค์์์ ์ฌ์ฉ: ์์์ ์ค์ ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ธ์คํด์ค์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
์ ๋ฆฌ
4. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ ์ฐจ์ ์ธ์ด > ๊ฐ์ฒด ์งํฅ ์ธ์ด
์ ์ฐจ์ ์ธ์ด: ์์ฐจ์ ์ธ ๋ช ๋ น์ ์กฐํฉ
๊ฐ์ฒด ์งํฅ ์ธ์ด: class ๋ผ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฒญ์ฌ์ง์ ์ด์ฉํด ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ด ํ๋ฒ์ ๋ฌถ์ฌ์ ์ฒ๋ฆฌ๋จ.
JavaScript๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ์๋์ง๋ง, ๊ฐ์ฒด ์งํฅ ํจํด์ผ๋ก ์์ฑ ๊ฐ๋ฅ
OOP์ ๋ค ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋
(1) Encapsulation(์บก์ํ)
๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ
์๋(Hiding): ๊ตฌํ์ ์จ๊ธฐ๊ณ , ๋์์ ๋ ธ์ถ
๋์จํ ๊ฒฐํฉ(Loose Coupling)์ ์ ๋ฆฌ: ์ฝ๋ ์คํ ์์์ ๋ฐ๋ผ ์ ์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ฝ๋๊ฐ ์์งํ๋ ์ค์ ๋ชจ์ต๊ณผ ๋ฎ๊ฒ ์ฝ๋๋ฅผ ๋ชจ์ ๊ฒฐํฉ, ์ธ์ ๋ ๊ตฌํ ์์ ๊ฐ๋ฅ
์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์
(2) Inheritance(์์)
๋ถ๋ชจ, ์ฆ ๊ธฐ๋ณธ ํด๋์ค(base class)์ ํน์ง์ ์์, ์ฆ ํ์ ํด๋์ค(derived class)๊ฐ ์์๋ฐ๋ ๊ฒ
์ฝ๋๊ฐ ๋จ์ํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์
(3) Abstraction(์ถ์ํ)
๋ด๋ถ ๊ตฌํ์ ๋ณต์ก but ์ค์ ๋ ธ์ถ๋๋ ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋ค์ด, ์๊ธฐ์น ๋ชปํ ์ฌ์ฉ์์ ๋ณํ ๋ฐฉ์ง
์บก์ํ๋ ๋ฐ์ดํฐ์ ์๋์ ์ค์ฌ์ ๋ง์ถ๊ณ , ์ถ์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ถํ์ํ ๋ฉ์๋ ๋ฑ์ ๋ ธ์ถ์ํค์ง ์๊ณ , ๋จ์ํ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ์ค์ฌ.
์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ณ ๋ณํ์ ๋ํ ์ํฅ ์ต์ํ
(4) Polymorphism(๋คํ์ฑ)
ex) ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ผ๋ ๊ฐ ์์์ ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ฒ ์ ์ฉ๋จ
๋์ผํ ๋ฉ์๋์ ๋ํด if/else์ ๊ฐ์ ์กฐ๊ฑด๋ฌธ ๋์ , ๊ฐ ๊ฐ์ฒด์ ํน์ฑ์ ๋ง๊ฒ ๋ค๋ฅด๊ฒ ์์ฑ ๊ฐ๋ฅ
5. ํ๋กํ ํ์
ํ๋กํ ํ์
๊ณผ ํด๋์ค
JavaScript๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด๋ก, ํ๋ก๋กํ์ ์ ์ํ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
ํ๋กํ ํ์
์ฒด์ธ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ฑ ์ค, ์์์ ๊ตฌํํ ๋๋ ํ๋กํ ํ์ ์ฒด์ธ ์ฌ์ฉ
Last updated