๐ ํ๋กํ ํ์ - 1
์ด๋ฒ ํฌ์คํ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํ ํ์ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํ๋กํ ํ์ ์ ๋ด์ฉ์ด ๋ง์์ ๋ํธ ์ ๋์ ๋๋ ์ ํฌ์คํ ํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ํธ์์๋ ํ๋กํ ํ์ ์ ํตํ ์์์ ๋ํด ๊ฐ๋ณ๊ฒ ์์๋ณด์!
์์
์์(inheritance)์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ๊ฐ๋ ์ผ๋ก์จ ํน์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋ฐ์์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
Java๋ C++ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด์งํฅ ์ธ์ด์์๋ Class๋ฅผ ์ด์ฉํ์ฌ ์์์ ๊ตฌํํ๋ค.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํ๋กํ ํ์
์ ๊ธฐ๋ฐ์ผ๋ก ์์์ ๊ตฌํํ๋ค. MDN์ ํ๋กํ ํ์
์ ๋ํ ์ค๋ช
์ ๋ณด์.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์์์ ๊ตฌํํ๋ค. (ES2015๋ถํฐ class ํค์๋๋ฅผ ์ง์ํ๊ธฐ ์์ํ์ผ๋, ๋ฌธ๋ฒ์ ์ธ ์๋ ์ผ ๋ฟ์ด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ์ธ์ด๋ค.)
ํ๋กํ ํ์
๊ทธ๋ฌ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋กํ ํ์ ์ ํตํด ์์์ด ์ด๋ค์ง๋ค๋ ๊ฒ์ ์๊ฒ ๋์ผ๋, ํ๋กํ ํ์ ์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์์๋ณด์. ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์์์ ์ ํํ ์ด์ผ๊ธฐํ๋ฉด ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง๋ค.
ํ๋กํ ํ์ ๊ฐ์ฒด๋ ๋จ์ํ ํน์ ๊ฐ์ฒด์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ก์จ ์์์ ์ํด ์ฌ์ฉ๋๋ค. ๋ถ๋ชจ ๊ฐ์ฒด๋ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ํตํด ์์์๊ฒ ๊ณต์ ํ๋กํผํฐ๋ฅผ ์ ๊ณตํ๊ณ , ์์ ๊ฐ์ฒด๋ ๋ถ๋ชจ์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ํตํด ๋ถ๋ชจ์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ํ, ์์ ๊ฐ์ฒด๋ [[prototype]] ์ ๊ทผ์, ์ฆ .__proto__๋ฅผ ํตํด ๋ถ๋ชจ์ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํด๋ณผ ์ ์๋ค.
ํ๋กํ ํ์ ์ ํตํ ์์
์ฌ์ค ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํ๋กํ ํ์ ์ ํตํ ์์์ ๊ฒฝํํ๋ค.
๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ์ดํดํด๋ณด์.
const person = {
age : 4
};
// ์ ์ํ์ง ์์ hasOwnProperty ๋ฉ์๋ ํธ์ถ
person.hasOwnProperty('age') // true
age๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ๋จํ ๊ฐ์ฒด person์ ์ ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์ person ๊ฐ์ฒด์ ์ ์ํ์ง ์์ hasOwnProperty
๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ฐ true๋ผ๋ ๊ฐ์ ๋ฐํํ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ป๊ฒ ๋ ์ผ์ผ๊น? person ๊ฐ์ฒด๋ฅผ ์์ธํ ๋ฏ์ด๋ณด์.
person ๊ฐ์ฒด๋ฅผ ์ดํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ ์ํ ์์ฑ age๋ผ๋ ์์ฑ ์ธ์๋ .__proto__ ๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ hasOwnProperty
๋ฉ์๋๋ ์ด ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฆ person ๊ฐ์ฒด๋ ๋ถ๋ชจ์ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์๋ hasOwnProperty๋ฅผ ์คํํ ๊ฒ์ด๋ค!
๊ทผ๋ฐ...๋ ์๋ฌด๊ฒ๋ ์์ํ์ ์ด ์๋๋ฐ?๐ค
I'm your father. I'm Object.
์๋ฌธ์ ํ๊ธฐ์ํด MDN์์ Object์ ๊ดํ ๊ธ ์ผ๋ถ๋ฅผ ๊ฐ์ ธ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ Object์ ์์์ด๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ Object.prototype์ผ๋ก๋ถํฐ ๋ฉ์๋์ ์์ฑ์ ์์๋ฐ๋๋ค.
MDN ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ ์ํ person์ด๋ผ๋ ๊ฐ์ฒด๋ Object์ ์์์ด๊ณ , Object.prototype ๊ฐ์ฒด๋ก๋ถํฐ ๋ฉ์๋์ ์์ฑ์ ์์ ๋ฐ์์ ๊ฒ์ด๋ค!
๊ทธ๋ฌ๋ฉด person์ ๋ถ๋ชจ๋ Object์ด๊ณ , person.__proto__์ ์ ์ฒด๋ Object์ ํ๋กํ ํ์ ๊ฐ์ฒด์ธ Object.prototype์๋ ๊ฒ์ผ๊น?
๊ทธ๋ ๋ค. ์ฐ๋ฆฌ๊ฐ ์ ์ํ person ๊ฐ์ฒด๋ Object์ ์์์ด๊ณ , ๊ทธ๋์ ์ฐ๋ฆฐ Object.prototype ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ธ hasOwnProperty
๋ฅผ ์ฌ์ฉํ ์ ์์๋ ๊ฒ์ด๋ค!
์ฆ, person๊ฐ์ฒด๋ Object ๊ฐ์ฒด๋ฅผ ์์ ๋ฐ์๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค.
์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
์ด๋ฏธ์ง ์ถ์ฒ : https://poiemaweb.com/js-prototype
์ ๋ฆฌ
- Object๋ ๋ชจ๋ ๊ฐ์ฒด์ ๋ถ๋ชจ์ด๋ค. (๋ชจ๋ ๊ฐ์ฒด๋ Object ๊ฐ์ฒด๋ฅผ ์์ํ๋ค.)
- ๋ฐ๋ผ์ Object.prototype ๊ฐ์ฒด๊ฐ ๊ฐ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ถ๋ชจ๋ prototype ๊ฐ์ฒด๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ๊ณต์ ํ๊ณ , ์์ ๊ฐ์ฒด๋ ๊ฐ์ฒด๋ .__proto__์ ํตํด ๋ถ๋ชจ์ prototype ๊ฐ์ฒด์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
๋ค์ ํธ์๋ ํ๋กํ ํ์ ์ ํตํ ์์๋ฐฉ๋ฒ๊ณผ, ํ๋กํ ํ์ ์ฒด์ธ์ ๋ํด์ ์์๋ณด์!
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ํ๋กํ ํ์ - 1), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@seeh_h/ํ๋กํ ํ์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค