Daily/Today I Learned
210115_TIL (OOP ์จ๋จน๊ธฐ, ๊ฐ๋จํ ๊ฒ์ ๊ตฌํํด๋ณด๊ธฐ)
joooing
2021. 1. 16. 04:19
๋ฐ์ํ
๐ ์ค๋ ํ ์ผ
โ๏ธ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ฌ์ฉํด๋ณด๊ธฐ (pseudoclassical, class ver.)
ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด์ธ Javascript์์ Prototype์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑ์ ํ ์ ์๋ ๋ฐฉ๋ฒ๋ค ์ค Pseudoclassialํ ๋ฐฉ๋ฒ๊ณผ class ํํ์์ ์ด์ฉํ๋ ๋ฐฉ์ ๋ ๊ฐ์ง๋ฅผ ์ด์ฉํด ์ง์ ๊ตฌํํด ๋ณด์๋ค. class๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ํธํ๊ธฐ๋ ํ์ง๋ง, ์ ๋ฐ์ ์ธ ๊ณผ์ ์ ์ดํดํ๋ ๋ฐ Pseudoclassical ํ ๋ฐฉ๋ฒ์ ๋จผ์ ๊ณต๋ถํ๊ฒ ๋์์ด ๋์๋ ๊ฒ ๊ฐ๋ค.
โ๏ธ ์์, ๋คํ์ฑ์ ๊ธฐ๋ฐ์ผ๋กํ ๊ฒ์ ๋ง๋ค๊ธฐ
์ด์ ๋ฐฐ์ด ๊ฐ์ฒด์งํฅ ๋ฐฉ์์ ์ฌ์ฉํด ๊ฐ๋จํ ๊ฒ์์ ๋ง๋ค์ด๋ดค๋ค. prototype์ ๊ธ๋ก๋ง ๊ณต๋ถํ๊ธฐ๋ณด๋ค๋ ์ง์ ์ฝ๋๋ก ์ณ๋ณด๋ ์ข ๋ ๊ฐ๋ ์ด ์กํ๋ ๋๋์ด์๋ค. ์ฐ์ ์ ํ์ด๋ถ๊ณผ ๊ฒ์ ์บ๋ฆญํฐ(?)์ ํน์ฑ๋ค์ ์์๊ณผ ๋คํ์ฑ์ ์ด์ฉํด ์ฝ๋๋ก ์์ฑํ๋ค. pseudoclassical ๋ฒ์ , class ๋ฒ์ ์ผ๋ก ๋ชจ๋ ์์ฑํด๋ณด๋ฉฐ ์ด๋ค ๋ฉด์์ ๋์ผํ๊ณ ์ด๋ค ๋ฉด์์ ๋ค๋ฅธ ์ง ๋น๊ตํด๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์๋ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ์ ํด๋ดค๋๋ฐ, ๋๋คํ ์์น์์ ๊น๋นก์ด๋ ์บ๋ฆญํฐ๋ฅผ ํด๋ฆญํ๋ฉด ์บ๋ฆญํฐ๊ฐ ์ฌ๋ผ์ง๊ณผ ๋์์ ์ ์๊ฐ ์ฌ๋ผ๊ฐ๊ณ , ์ผ์ ์ ์๊ฐ ๋๋ฉด ์ฌ์ฉ์์๊ฒ ๊ฒ์์ ํด๋ฆฌ์ดํ๋ค๊ณ ์๋ ค์ฃผ๋ ๋ถ๋ถ๊น์ง ์์ฑํด๋ณด์๋ค. ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ์ข ๋ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ๋ฏธ๋ฆฌ ์ธ์ ๋์ด์ผ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์ด ์ ๋ฐ์ ์ธ ๊ทธ๋ฆผ์ ๋จผ์ ๊ทธ๋ ค๋ณด๊ณ ํ๋์ฉ ๊ธฐ๋ฅ์ ๋ํด๋ณด๋ ค ํ๋ค.
๐ ๊ธฐ์ตํ ๊ฒ
โ๏ธ pseudoclassicalํ๊ฒ ๊ฐ์ฒด์งํฅ ๊ตฌํํ๊ธฐ
1. ์์ & ๋ถ๋ชจ ์ฐ๊ฒฐํ๊ธฐ (call, apply)
2. ์์ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ (prototype์ ํ ๋น ๊ฐ๋ฅํ(assignable) ํน์ง ์ด์ฉ)
3. ์์ ํ๋ด๋ด๊ธฐ (Object.create)
4. ์ฐ๊ฒฐ๊ณ ๋ฆฌ ๋๊ธฐ (์์ ์์ฑ์ ํจ์์ constructor ๋ฅผ ์๊ธฐ ์์ ์ผ๋ก ์ฌํ ๋น)
โ๏ธ Object.create()
Object.create() ๋ ์ฒซ๋ฒ์งธ ์ธ์๋ก ๋ค์ด๊ฐ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด prototype๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฉ์๋์ด๋ค. ๊ธฐ๋ฅ์ '๋ณต์ฌ'ํ ์๋ก์ด prototype ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์๋ ๋ค๋ฅธ ์ฐธ์กฐ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. ๋ถ๋ชจ๋ก๋ถํฐ ์์ฑ์ ๋ฌผ๋ ค๋ฐ์ง๋ง ์์๋ค๋ ๊ฐ์ ์์ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์ ๋(๋คํ์ฑ ๊ตฌํ) Object.create() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค!
โ๏ธ super ํค์๋
super ํค์๋๋ ์์์ด ๋ถ๋ชจ๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉํ๋ค. constructor์๋ super๋ง ์ ๊ฑฐ๋, this๊ฐ ๋์ค๊ธฐ ์ ์ ํธ์ถ๋์ด์ผ ํ๋ค!
๐ ๋ ๊ณต๋ถํ ๊ฒ
โ๏ธ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ณํ ์ธ์ฐ๊ธฐ
โ๏ธ ์๋ก์ด CSS ๋ฌธ๋ฒ ๋ ์์๋ณด๊ธฐ
โ๏ธ Particle System
๋ฐ์ํ