์ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ์ ๋๋ DOM API๋ฅผ ํ์ฉํ ํ๋ก๊ทธ๋๋ฐ๋ง์ ํ์๋ค. ํ๋ก๊ทธ๋๋จธ์ค ๊ณผ์ ํ ์คํธ๋ฅผ ์ฒ์ ํ์์ ๋์ ์ฝ๋๋ง ๋ณด๋๋ผ๋ ์ฒ์ฐธํ๋ ๊ณผ๊ฑฐ ์ค๋ ฅ์ ํ์ธํ ์ ์๋ค. (ํ๋ก๊ทธ๋๋จธ์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฒ์ (์ฒซ ์๋) ์ฐธ์กฐ)
๋ณํ๊ฐ ํ์ํจ์ ๋๊ปด ๊ณผ์ ํ ์คํธ์ ์ ๋ต์ ๋ณด์๋ค. ์ ๋ต์ ์ฐธ๊ณ ํ์ฌ ๊ฐ์ฒด๋ฅผ ํ์ฉํ ๋ฐฉ์์ ์ตํ๋ณด๊ณ , ์ด๋ฅผ ์ ์ฉํด ์๋กญ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๋ฉฐ ์ด๋์ ๋ ์ค๋ ฅ์ด ์์๋ค๊ณ ์ฐฉ๊ฐํ์๋ค. (ํ๋ก๊ทธ๋๋จธ์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฒ์ (์) ์ฐธ์กฐ)
์ฝ๋๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ๋๋ ํจ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ง์ ์ฌ์ฉํด๋ณด์๋ค. ๊ทผ๋ฐ ์ด๊ฒ ์ฌ๊ฑธ? ์ฐํ ์ฝ 5๊ธฐ ํ๋ฆฌ์ฝ์ค์ ์ฃผ์ด์ง ์ฝ๋๋ค์ class๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋์๋ค. ์์ ๋ณํ์๋ ๊ตฌํ์ด ๋ง์ค์ฌ์ง๋ ๋ด ๋ชจ์ต์ ๋ณด๋ฉฐ ๊ทผ๋ณธ์ ์ธ ๊ณต๋ถ๊ฐ ํ์ํจ์ ๋๋ผ๊ฒ ๋์๋ค.
์ด๋ฒ ๊ธฐํ์ ๊ณต๋ถํด๋ณด์ ์ถ์ด ํ๋ฆฌ์ฝ์ค ๊ธฐ๊ฐ๋์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ ๋ฆฌ์ผ์ ๋ณด๋ฉฐ ๊ทผ๋ณธ์ ์ธ ๊ณต๋ถ๋ฅผ ํด๋๊ฐ๊ณ , ์ด๋ ๊ณต๋ถํ class์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์์ฑ์ ํจ์๋ class์ ์ฐจ์ด๊ฐ ๋ญ๊น?
์ผ๋จ ๋ด๊ฐ ๊ณต๋ถ๋ฅผ ์์ํ ์ด์ ๋ ์ ์ง๋ฌธ์ ํด๊ฒฐํ๊ธฐ ์ํด์์๋ค. ์์ฑ์ ํจ์์ ์์๋ฅผ ๋ณด์.
function User(name) {
this.name = name;
this.callName = () => {
console.log(this.name);
};
}
const user = new User("์ฐํ
์ฝ");
user.callName();
ํจ์๋ก ๋ง๋ค์ด์ง User
์ new
๋ฅผ ๋ถ์ฌ ์์ฑ์ ํจ์๋ก ์ฌ์ฉํ ์์์ด๋ค. ์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด ์ฐํ
์ฝ
๊ฐ ์ฝ์์ ์ถ๋ ฅ๋๋ค.
๋ง์น ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ๊ฒ๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋์ ์๋ฆฌ๋ฅผ ์ดํด๋ณด๋ ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋์ํ๊ฒ ๋๋ค.
- ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํด
this
์ ํ ๋นํ๋ค.- ํจ์ ๋ณธ๋ฌธ์ ์คํ์์ผ
this
์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐ์ํจ๋ค.this
๋ฅผ ๋ฐํํ๋ค.
์ด๋ฒ์ class์ ์์๋ฅผ ๋ณด์.
class User{
constructor(name){
this.name = name;
}
callName(){
console.log(this.name);
}
}
const user = new User("์ฐํ
์ฝ");
user.callName();
์ด์ ์์ฑ์ ํจ์์ ์์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๋ ์์์ด๋ค. ์ด๋ ๊ฒ๋ง ๋ณด๋ฉด new
๋ฅผ ํตํด ์ธ์คํด์ค์ ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํํ๊ณ , ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ์์ ์ถ๋ ฅํด์ค๋ค๋ ์ ์์ ๋ ์์๊ฐ ์์ ํ ๋์ผํด๋ณด์ธ๋ค.
class์ ๋์ ์๋ฆฌ๋ฅผ ์ฐพ์๋ณด๋ ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋์ํ๊ฒ ๋๋ค.
- User๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํจ์๋ฅผ ๋ง๋ ๋ค.
1-1. ํจ์ ๋ณธ๋ฌธ์ ์์ฑ์ ๋ฉ์๋์์ ๊ฐ์ ธ์จ๋ค.
1-2. ์์ฑ์ ๋ฉ์๋๊ฐ ์๋ค๋ฉด ๋ณธ๋ฌธ์ด ๋น์์ง์ฑ๋ก ํจ์๊ฐ ๋ง๋ค์ด์ง๋ค.- ํด๋์ค ๋ด์ ์ ์ํ ํ๋กํผํฐ, ๋ฉ์๋๋ฅผ
User.prototype
์ ์ ์ฅํ๋ค.
์ค์...? ๊ฒฐ๊ตญ์ class๋ฅผ ํตํด ๋ง๋ ๊ฐ์ฒด๋ ํจ์๋ก ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ค. ํ์ง๋ง ๋ ์ฐพ์๋ณด๋ ๋ ๋ฐฉ์์
- class๋ก ๋ง๋ ํจ์์ ํน์ ๋ด๋ถ ํ๋กํผํฐ
[[IsClassConstructor]]: true
๊ฐ ๋ถ๋๋ค.- ํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ ์ด๊ฑฐํ ์ ์๋ค. (non-enumerableํ๋ค)
- ํด๋์ค๋ ํญ์ ์๊ฒฉ ๋ชจ๋๋ก ์คํ๋๋ค.
์ ์ธ๊ฐ์ง ์ฐจ์ด๋ฅผ ๊ฐ๊ณ ์๋ค๊ณ ํ๋ค.
[[IsClassConstructor]]
๋?function ํค์๋๋ฅผ ํตํด ์์ฑํ User
ํจ์๋ ๊ทธ๋ฅ User
์์ฒด๋ก ํธ์ถํ๊ฑฐ๋ new User
๋ฅผ ํตํด ์์ฑ์ ํจ์๋ก ํธ์ถํ๋ ๋ฐฉ์์ ์ ํํ ์ ์๊ฒ๋๋ค.
ํ์ง๋ง class๋ฅผ ํตํด ๋ง๋ User ํด๋์ค๋ ์ค๊ฐ์ ํจ์๋ก ๋ณ๊ฒฝ๋๊ธด ํ์ง๋ง User
์์ฒด๋ก ํธ์ถ์ ํ ์ ์๋ค. ์ด๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ์์ธ์ด ๋ฐ๋ก [[IsClassConstructor]]: true
์ธ ๊ฒ์ด๋ค.
๋, class๋ฅผ ํตํด ๋ง๋ User ํด๋์ค๋ console.log
๋ฅผ ํตํด ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ถ๋ ฅํ ๋ class User {...}
์ผ๋ก ์ถ๋ ฅ๋๋๋ฐ, ์ด๋ฅผ ๊ฒฐ์ ํ๋ ์์ธ๋ [[IsClassConstructor]]: true
์ด๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด [[IsClassConstructor]]: true
๋ class๋ฅผ ํตํด ๋ง๋ ๊ฐ์ฒด๊ฐ ํจ์๋ก ๋ณํ๋์์ ๋ ๊ทธ๋ฅ function
์ ํตํด ๋ง๋ ํจ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์์๋ผ๊ณ ํ ์ ์๋ค.
non-enumerable
๋?๋ค์ ๋ ์์๋ฅผ ๋ณด์.
js์ for ...in
์ ํตํด ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ์ฒซ๋ฒ์งธ ์์์์ ๋ฉ์๋๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ถ๋ ฅ๋จ์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง ๋๋ฒ์งธ ์์์์ ๋ฉ์๋๊ฐ ํฌํจ๋์ง ์์์ ํ์ธํ ์ ์๋ค.
๋ณดํต์ ๊ฒฝ์ฐ์ ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ๋ฉ์๋๋ฅผ ์ํ ๋์์์ ์ ์ธํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ์ฉํ ํน์ง์ด ๋ ์ ์๋ค๊ณ ํ๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด non-enumerable
ํ ํน์ฑ์ ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ์ด๊ฑฐํ ์ ์๋ ํน์ฑ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๊ฒฉ ๋ชจ๋
๋?์๊ฒฉ ๋ชจ๋์ ๋ํด ์ด์ผ๊ธฐ ํ๋ ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญ์ฌ์ ๋ํด ์กฐ๊ธ ์์์ผํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ์กด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์ฝ๋๋ค์ ๊ณ์ํด์ ์ฌ์ฉํ ์ ์์๋ค. ํ์ง๋ง ES5์์๋ถํฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉฐ ๊ธฐ์กด์ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ณ๊ฒฝ์์ผฐ๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด ์ฝ๋์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ๊ฒ ๋์๋ค.
๊ทธ๋์ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ถ๋ถ์ด ES5์ ๊ธฐ๋ณธ๋ชจ๋์์ ํ์ฑํ๋์ง ์๋๋ก ์ค๊ณ๋์๋ค. ๋์ use strict
๋ผ๋ ํน๋ณ ์ง์์๋ฅผ ์ฌ์ฉํด ์๊ฒฉ ๋ชจ๋
๋ฅผ ํ์ฑํ ํ์ ๋๋ง ์ด ๋ณ๊ฒฝ์ฌํญ์ด ํ์ฑํ ๋๊ฒ ํด๋์๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด ์๊ฒฉ ๋ชจ๋
๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ์ฌํญ์ ํ์ฑํํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋๋ผ๊ณ ํ ์ ์๋ค.