220819(๊ธ)
๐ชด ์ฑ์ฅ์ผ์ง
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ ํค์๋ ์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
JavaScript
ํด๋์ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์
๊ธฐ๋ฐ ์ธ์ด์ด๊ธฐ์ ์์
์ ๊ฐ๋
์ด ์กด์ฌํ์ง ์์
ES6๋ถํฐ๋ ํด๋์ค ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋์์ผ๋, ์ฌ์ค์ ์ด๊ฒ๋ ํ๋กํ ํ์
์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ถ๋ถ๋ค์ด ์์
- class: ์ง๋จ, ์งํฉ์ผ๋ก ๊ณตํต์ ์์ฑ์ ๋ชจ์๋์ ์ถ์์ ์ธ ๊ฐ๋ ex) ์์, ๊ณผ์ผ
- instance: ๊ตฌ์ฒด์ ์ธ ์์; class์ ์ํด ๊ตฌ์ฒด์ , ์ค์ฒด์ ์ผ๋ก ๊ตฌํ๋ ๊ฐ์ฒด ex) ๋ฐ๋๋, ์ฌ๊ณผ
ํด๋์ค์ ์ํ ๊ด๊ณ ์์ ์ด๋ ํด๋์ค์ ๊ณผ์ผ ์ด๋ ํด๋์ค๊ฐ ์์ ๋, ์์์ด ๊ณผ์ผ์ superclass์ด๊ณ ๊ณผ์ผ์ ์์์ subclass๊ฐ ๋ฉ๋๋ค. ์ฆ, ํ์ ํด๋์ค์์ ์์ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํฌ ๋, super๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋๋ค.
ํ๋กํ ํ์ ์ฒด์ด๋(Remind)
์์ ๋ค์ค ํ๋กํ ํ์
์ฒด์ด๋
์ผ๋ก ํน์ ์์ฑ์์ protorype์ ์ป๊ณ ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ์์ฑ์์ instance๋ฅผ ํ ๋นํจ์ผ๋ก์จ ๊ทธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ ๊ฐ๋
๊ฒฐ๊ตญ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด์ ์ ์ฌํ๊ฒ ํด๋์ค๋ฅผ ๊ตฌํ
// ๊ธฐ๋ณธ์ ์ผ๋ก SubClass, SuperClass๋ผ๋ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์
var instance = new SubClass();
// ์ด ๋, SubClass์ด๋ ์์ฑ์์ ๋ ๋์๊ฐ SuperClass๋ผ๋ ์์ฑ์๋ฅผ ์ฒด์ด๋ํ๊ณ ์ถ์ผ๋ฉด
SubClass.prototype = new SuperClass();
// ์ดํ ๋ง๋ instance๋ ํ๋กํ ํ์
์ฒด์ด๋์ ์ํด SubClass.prototype์๋ ์ ๊ทผ ๊ฐ๋ฅ
var instance2 = new SubClass();
ํ๋กํ ํ์ ๊ธฐ๋ฐ ํด๋์ค ๊ตฌํ์ ๋ฌธ์ ์
์์ ์์๋ฅผ ํตํด ์ดํด๋ณด๋ฉด
- SuperClass์ static method ํน์ property๊ฐ ๊ทธ๋๋ก ๋จ์์์
- ๋น์ฅ์ ๋ฌธ์ ๊ฐ ์๋์ด๋, ํ๋กํผํฐ ๋ฐ ๋ฉ์๋ ๋ช ์ด ์ค์ฒฉ๋ ์ ์๊ณ ์์น ์์ ๊ฐ์ด ๋์ฌ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌ
instance2.__proto__.constructor
๋ฅผ ํด๋instance2.__proto__(.__proto__).constructor
์ด๋ฏ๋ก SuperClass๋ฅผ ์๋ฏธ. ์ฆ, SubClass์ ์ ๊ทผ ํ ์๊ฐ ์์
ํด๊ฒฐ๋ฒ
-
method ๋ฐ property๊ฐ ๊ทธ๋๋ก ๋จ์์๋ ๋ฌธ์
- SuperClass์ instance๋ฅผ ํ ๋น ํ, delete์ ํตํด ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ์ผ์ผํ ์ง์ฐ๊ธฐ
var Bridge = function () {};
์ธ ๋น์ด์๋ ์์ฑ์ ํจ์๋ฅผ ํ์ฉํ๊ธฐ- ES5์์ ๋์ ๋ Object.create(์์ํด๋์ค.prototype)์ ํ์ฉ
-
SubClass ์์ฒด์ ์ ๊ทผ ๋ชปํ๋ ๋ฌธ์
- SubClass.prototype.constructor = SubClass; ๋ก ๋ฐ๋ก ํ ๋นํด์ฃผ๊ธฐ
ES6์ class ๋ง๋ณด๊ธฐ
์์ ์ฝ๋๋ ์๋์ ๊ฐ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก new๋ฅผ ํตํด ํธ์ถํ๋ฉด instance๊ฐ ๋ง๋ค์ด์ง๋ค.
// ES5: ํ๋กํ ํ์
์ผ๋ก ๊ตฌํ
var Dog = function (name) {
this.name = name;
};
Dog.staticMethod = function () {
return this.name + '์คํ
ํฑ ๋ฉ์๋';
};
Dog.prototype.bark = function () {
return this.name + ': ์์!';
};
// ES6: class๋ก ๊ตฌํ
var Dog = class {
constructor (name) {
this.name = name;
}
static staticMethod {
return this.name + '์คํ
ํฑ ๋ฉ์๋';
}
bark () {
return this.name + ': ์์ธ์์ธ!';
}
};