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

 

๋ฐ˜์‘ํ˜•