์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณธ๋ ํ๋กํ ํ์ (prototype)์ ์ด์ฉํด์ ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ es6๋ถํฐ Class๊ฐ ์ถ๊ฐ ๋์์ต๋๋ค.
์ผ๋จ ๊ทธ ์ ์ Object์ ๋ํด ์์๋์?
Class๊ฐ ํ ํ๋ฆฟ, ์ฆ ๊ฐ์ฒด ๊ณต์ฅ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด Object๋ ๊ทธ ๊ฐ์ฒด๊ณต์ฅ์์ ๋ง๋ค์ด์ง ์ค์ฒด์ ๋๋ค. ์ ๋ง ๋ง์ด ๋๋ ์์๋ก๋ ๋ถ์ด๋นตํ๊ณผ ๋ถ์ด๋นต์ด ์์ต๋๋ค. ๋ถ์ด๋นตํ์ ํด๋์ค์ด๊ณ ๋ถ์ด๋นต์ Object๋ก ๋น์ ํ๋ฉด ์ด๋ณด์์๊ฒ ์ดํด๊ฐ ์ ๋ง ์ฝ์ต๋๋ค.
let person = {name: 'kimtaejin', age: 1};
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์์ ๊ฐ์ด Object๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ํ, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ฅผ ํตํด Object๋ฅผ ์์ฑํ ์ ์๋๋ฐ์.
function Person(name, age){
this.name = name;
this.age = age;
}
let kim = new Person('taejinkim',1);
์ด๋ ๋ฏ, Obejct๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ์ข ๋ฅ์ ๊ฐ๋ค์ ํ๋๋ก ๋ฌถ์ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ณ , ์ด๋ ํ๋์ ์๋ฃํ๋ง์ ์ ์ฅํ ์ ์๋ ๋ฐฐ์ด๊ณผ์ ์ฐจ์ด์ด๊ธฐ๋ ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด์ ์๋ก ๋ค๋ฅธ ์๋ฃํ์ ๋ฃ์ด๋ ์ค๋ฅ๊ฐ ์๊ธฐ์ง๋ ์์ง๋ง, ๊ทธ๋ ๊ฒ ํ๋ฉด ์๋ฉ๋๋ค... ๊ทธ๋ฅ ์๋ฉ๋๋ค. ์ ๋...
๋ค๋ง ์์ new๊ฐ์ ๊ฒฝ์ฐ๋ ์ ๋ ๊ฒ ํจ์์๋ง ์ธ ์ ์์ ๊ฒ๋๋ค.
์ ๋ ์ด๋๋ถํฐ ๊ถ๊ธํ๊ฒ ์๊ฒจ์ MDN์ ์ฐพ์๋ดค์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ถ๋ช ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ์ธ์ด๋ผ๊ณ ์ค๋ช ์ ๋ค์ด์๊ณ , ์ ๋ถ๋ถ๊น์ง์ ์ง์๋ง ๊ฐ์ง ์ํ์์๋ ๊ทธ ๋ง์ ์ดํดํ ์ ๊ฐ ์์์ต๋๋ค.
MDN์ฌ์ดํธ๋ฅผ ๋ณธ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์ด ๋์์์ต๋๋ค.
์ด๋ฅผ ํตํด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ํ๋กํ ํ์ ์ ํตํด ์์์ ํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋น์ฐํ ๊ทผ๋ณธ์ด ๋๋ ๊ฐ๋ ์ด๊ฒ ์ฃ . ๋ํ ๊ฐ์ฒด๋ฅผ ์์ํ๊ณ ์์ ํ๋กํ ํ์ ๊ณผ์ ๊ด๊ณ๋ฅผ ํ๋กํ ํ์ ์ฒด์ธ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๋กํ ํ์ ์ ํตํด ์์์ ํ๋ค๋ ๊ฒ์ ๋ฌด์จ ์๋ฏธ์ผ๊น์?
๊ทธ์ ์ ํ๋กํ ํ์ ์ ์ฅ์ ์ ํ ๋ฒ ์์๋ด ์๋ค. ํ๋กํ ํ์ ์ ์ฅ์ ์ค ํ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.gender = 'male';
let kim = new Person('taejin', 1);
let oh = new Person('oh ha yeong',2);
oh.gender = 'female';
console.log(kim.gender);
console.log(oh.gender);
console.log(Object);
console.log(Person);
console.log(kim);
console.log(oh);
์ฐ์ , ์์ ์ฝ๋๋ฅผ ๋ณด์๋ฉด prototype์ ํตํด gender๋ฅผ ๊ณต์ ํ๊ฒ ํ๊ณ , oh๊ฐ์ ๊ฒฝ์ฐ๋ ์ฌ์์ด๊ธฐ์ ์ถํ์ female๋ก ๋ณ๊ฒฝํ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฌด์จ๋ง์ด๋๋ฉด ์์๊ฐ ์ข ์ต์ง์ค๋ฌ์ด ๊ฐ์ด ์์ง ์์์๋๋ฐ ์ฑ๋ณ์ Person์ ํ์์์ ์ด์ง๋ง ๋ฌด์กฐ๊ฑด male๋ก ์ด๊ธฐํ ํ๋ค๊ณ ํฉ์๋ค. ๊ทธ๋ ๋ค๋ฉด Person ๊ฐ์ฒด ์์์ ์ ํ๊ธฐ ๋ณด๋ค๋ Person์ผ๋ก ๋ง๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๊ฒ๋ ์ค์ ํ๋ ๊ฒ๋๋ค. ์ฆ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ์ ์ด์ฃ . ๋ํ ์์ธ๊ฐ ์๋ค๋ฉด male์ด ์๋ female๋ก ๋ฐ๊ฟ ์๋ ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ Obejct์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๊ฐ์ ๊ณต์ฅ์ ํ ์์์ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ค๋ ๊ฒ์ด์ฃ !!
์ฌ๊ธฐ๊น์ง๋ง ๋ฐฐ์์๋ ๊ทธ๋ prototype์ ๊ทธ๋ฐ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค...๋ก๋ง ๋๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํ์ง๋ง ์์์ mdn์ฌ์ดํธ์ ๊ธ์ ๊ธฐ์ตํ์ธ์!! prototype์ด ์ํ์ด๊ณ ๊ทธ๊ฒ์ ์์์ ๊ฐ๋ฅํ๊ฒ ํ๋ต๋๋ค!!
์ด๊ฒ ๋ฌด์จ... ์๋ฆฌ์ง??
์ผ๋จ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ฐ๋ก ์์ ์ฝ๋์ ๊ฒฐ๊ณผ๊ฐ์ ์ดํด๋ด ์๋ค.
์ฌ๊ธฐ์ 3๋ฒ์งธ ์ค์ ๋ณด์๋ฉด Object()๋ native code ์ฆ, ๋ด์ฅ๋ ์ฝ๋๋ผ๊ณ ํฉ๋๋ค.
๊ทธ ๋ค๋ก ์ ๊ฐ ์ถ๋ ฅํ Person ํจ์๊ฐ ๋์ค๊ณ , ๊ทธ ๋ค๋ก๋ kim๊ณผ oh์ ๊ฐ์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ญ๊ฐ ๋ณด์ด์์ง ์๋์?? ๋ด __proto__์ ๋๋ค. __proto__: Object๋ผ๊ณ ๋์์๋ค์ ๋ฌด์จ ์๋ฏธ์ผ๊น์?
์์ธํ ์ค์ธ์ ํด๋ด ์๋ค. ๋ด __proto__ ๋ฅผ ์ฌ๋ ๋ฌด์์ด ๋์๋์.. ๋ฐ๋ก prototype.gender = 'male'๋ก ์ง์ ํด ๋์ ๋ถ๋ถ๊ณผ ํจ๊ป __proto__:Object๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.!!!!!
์ด ๋ง์ ์ฆ Person์ ๊ฐ์ฒด๋ Object์ prototype.ํจ์ ๋ก ์ ์๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ๋ก ํด์ ๋ฉ๋๋ค.(์ฐธ๊ณ ๋ก Object๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ ์ ์๋ ์กฐ์์ ๋๋ค. ํฌ์ธํธ๋ ์ __proto__๋ฅผ ํตํด์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ!! ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ๋ ๊ฒ __proto__์์ __proto__๊ฐ chain์ ํํ๋ก ์ฐ๊ฒฐ๋์ง๋ ์์๊ฒ ์ฃ .)
์ ์ฌ๊ธฐ๊น์ง ๊ณต๋ถํ์๋ mdn์ ๊ทธ ๊ธ๊ท๋ฅผ ์ดํดํ๊ฒ ๋์ด ์ ๋ง ๋ผ๋ปค์ต๋๋ค. ์ด๋์ prototype ์ฒด์ธ์ด๋ผ๊ณ ๋ถ๋ ๊ณ ์ด๋ฅผ ์ด์ฉํด์ ์์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค.
์ฐ์ ์ฌ๊ธฐ๊น์ง๋ง ์ดํดํ๋ฉด ๋ฉ๋๋ค. ๋ค์ ํฌ์คํ ์์๋ ์ด๋ฅผ ๋ ๊น๊ฒ ๋ค๋ฃจ๊ณ , prototype ์์๋ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์ด๋ป๊ฒ prototype์ ์์ฑ๋ค์ด ์ถ๋ ฅ๋๋์ง ๋ํ ์์๋ณผ๊ฒ๋๋ค.
developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes
Object prototypes
Javascript์์๋ ๊ฐ์ฒด๋ฅผ ์์ํ๊ธฐ ์ํ์ฌ ํ๋กํ ํ์ ์ด๋ผ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ๋ณธ ๋ฌธ์์์๋ ํ๋กํ ํ์ ์ฒด์ธ์ด ๋์ํ๋ ๋ฐฉ์์ ์ค๋ช ํ๊ณ ์ด๋ฏธ ์กด์ฌํ๋ ์์ฑ์์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ๏ฟฝ
developer.mozilla.org
developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain
์์๊ณผ ํ๋กํ ํ์
Java ๋ C++ ๊ฐ์ด ํด๋์ค ๊ธฐ๋ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋จธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ ์ธ ์ธ์ด๋ผ๋ ์ ๊ณผ ํด๋์ค๊ฐ ์๋ค๋ ๊ฒ์์ ํผ๋์ค๋ฌ์ ํ๋ค. (ES2015๋ถํฐ class ํค์๋๋ฅผ ์ง์ํ๊ธฐ ์์ํ์ผ๋, ๏ฟฝ๏ฟฝ
developer.mozilla.org
์ถ๊ฐ์ ์ผ๋ก ํ๋กํ ํ์ ์ ์ ๋ง ์ ์ค๋ช ํ ๋ธ๋ก๊ทธ๊ฐ ์์ด์ ๋งํฌ๋ฅผ ๋จ๊ฒจ ๋ด ๋๋ค.
medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67
[Javascript ] ํ๋กํ ํ์ ์ดํดํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํ๋ฉด ๋น ์ง ์ ์๋ ๊ฒ์ด ํ๋กํ ํ์ ์ธ๋ฐ์. ํ๋กํ ํ์ ์ด ๊ฑฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ทธ ์์ฒด์ด๊ธฐ๋๋ฌธ์ ์ดํดํ๋ ๊ฒ์ด ์ด๋ ต
medium.com