-
[Javascript] ํด๋์ค์ ๋์์๋ฆฌ์ ํด๋์ค ์์(์ค๋ฒ๋ผ์ด๋ฉ)Language/JavaScript 2023. 1. 3. 22:52
๐ ์ถ์ฒ : https://ko.javascript.info/class
ํด๋์ค
ํด๋์ค ๋์์๋ฆฌ
ํจ์๋ ๊ธฐ๋ฅ์ ํฌ์ฅํ๋ ๊ธฐ์ ์ด๋ผ๋ฉด, ํด๋์ค๋ ๋ณ์์ ํจ์ ์ค ์ฐ๊ด์๋ ๊ฒ๋ค์ ์ ๋ณํด ํฌ์ฅํ๋ ๊ธฐ์ ์ด๋ค. ํด๋์ค๋ฅผ ํ์ฉํ๋ฉด ๊ฐ์ฒด๋จ์๋ก ์ฝ๋๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๋ค.
class User { constructor(name) { this.name = name } sayHi() { console.log(this.name) } } console.log(typeof User) // function
class User { … } ๋ฌธ๋ฒ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- User๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํจ์๋ฅผ ๋ง๋ ๋ค. ํจ์ ๋ณธ๋ฌธ์ ์์ฑ์ ๋ฉ์๋ constructor์์ ๊ฐ์ ธ์จ๋ค. ์์ฑ์ ๋ฉ์๋๊ฐ ์์ผ๋ฉด ๋ณธ๋ฌธ์ด ๋น์์ง ์ฑ๋ก ํจ์๊ฐ ๋ง๋ค์ด์ง๋ค.
- sayHi ๊ฐ์ ํด๋์ค ๋ด์์ ์ ์ํ ๋ฉ์๋๋ฅผ User.prototype์ ์ ์ฅํ๋ค.
⇒ new User๋ฅผ ํธ์ถํด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด User ํจ์์ prototype ํ๋กํผํฐ๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ์ ์๋ค(User class๊ฐ ์์ฑํ ์ธ์คํด์ค์ ํ๋กํ ํ์ ์ด User.prototype์ด๊ธฐ ๋๋ฌธ!)
ํด๋์ค์ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ์์ํจ์
// class User์ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ์์ ํจ์๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค. // 1. ์์ฑ์ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. function User(name) { this.name = name; } // ๋ชจ๋ ํจ์์ ํ๋กํ ํ์ ์ 'constructor' ํ๋กํผํฐ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ // constructor ํ๋กํผํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. // ์ฆ User.prototype์ ์ฝ์์ ์ฐ์ด๋ณด๋ฉด constructor ๋ฉ์๋๊ฐ ๋ด์ฅ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. // 2. prototype์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. User.prototype.sayHi = function() { alert(this.name); }; // ์ฌ์ฉ๋ฒ: let user = new User("John"); user.sayHi();
์์ ์์์ฒ๋ผ ์์ ํจ์๋ก ํด๋์ค ์ญํ ์ ํจ์๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ๊ณผ class ํค์๋ค๋ฅด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ๊ณผ๋ ๊ฑฐ์ ๊ฐ๋ค.
ํ์ง๋ง ๋ ๋ฐฉ๋ฒ์๋ ์ค์ํ ์ฐจ์ด๊ฐ ์๋ค.
ํด๋์ค vs ์์ฑ์ ํจ์
- class๋ก ๋ง๋ ํจ์์ ํน์ ๋ด๋ถ ํ๋กํผํฐ์ธ [[IsClassConstructor]] : true ๊ฐ ์ด๋ฆํ์ฒ๋ผ ๋ถ๋๋ค. ์ด๊ฒ๋ง์ผ๋ก๋ ๋ ๋ฐฉ๋ฒ์ ๋ถ๋ช ํ ์ฐจ์ด๊ฐ ์์์ ์ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค์ํ ๊ฒฝ์ฐ์ ์ด๋ฅผ ํ์ฉํ๋ค. ํด๋์ค ์์ฑ์๋ฅผ new์ ํจ๊ป ํธ์ถํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ ์ด ๋ [[IsClassConstructor]] : true ๊ฐ ์ฌ์ฉ๋๋ค. ๋ํ ํด๋์ค ์์ฑ์๋ฅผ ๋ฌธ์์ด๋ก ํ๋ณํ ํ๋ฉด ‘class’๋ก ์์ํ๋ ๋ฌธ์์ด์ด ๋๋๋ฐ ์ด๋๋ [[IsClassConstructor]] : true ๊ฐ ์ฌ์ฉ๋๋ค.
- class User { constructor() {} } console.log(typeof User); // User์ ํ์ ์ ํจ์์ด๊ธด ํ์ง๋ง ๊ทธ๋ฅ ํธ์ถํ ์ ์์ต๋๋ค. User(); // TypeError: Class constructor User cannot be invoked without 'new' console.log(User); // class User { ... }
- ํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ค์ ์ด๊ฑฐํ ์ ์๋ค(non-enumerable). ํด๋์ค์ prototype ํ๋กํผํฐ์ ์ถ๊ฐ๋ ๋ฉ์๋์ enumerable ํ๋๊ทธ๋ false์ด๋ค. for-in์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ๋ฉ์๋๋ ์ํ์ ๋์์์ ์ ์ธํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ด ํน์ง์ด ๊ฝค ์ ์ฉํ๋ค.
- ํด๋์ค๋ ํญ์ ์๊ฒฉ๋ชจ๋๋ก ์คํ๋๋ค.(use strict)
ํด๋์ค ์์
extends ํค์๋
class Animal { constructor(name) { this.speed = 0; this.name = name; } run(speed) { this.speed = speed; alert(`${this.name} ์/๋ ์๋ ${this.speed}๋ก ๋ฌ๋ฆฝ๋๋ค.`); } stop() { this.speed = 0; alert(`${this.name} ์ด/๊ฐ ๋ฉ์ท์ต๋๋ค.`); } } let animal = new Animal("๋๋ฌผ"); class Rabbit extends Animal { hide() { alert(`${this.name} ์ด/๊ฐ ์จ์์ต๋๋ค!`); } } let rabbit = new Rabbit("ํฐ ํ ๋ผ"); rabbit.run(5); // ํฐ ํ ๋ผ ์/๋ ์๋ 5๋ก ๋ฌ๋ฆฝ๋๋ค. rabbit.hide(); // ํฐ ํ ๋ผ ์ด/๊ฐ ์จ์์ต๋๋ค!
ํด๋์ค Rabbit์ ์ฌ์ฉํด ๋ง๋ ๊ฐ์ฒด๋ rabbit.hide() ๊ฐ์ Rabbit์ ์ ์๋ ๋ฉ์๋์๋ ์ ๊ทผํ ์ ์๊ณ rabbit.run()๊ฐ์ Animal์ ์ ์๋ ๋ฉ์๋์๋ ์ ๊ทผํ ์ ์๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ํค์๋ extends ๋๋ฌธ์ธ๋ฐ, ํค์๋ extends๋ ํ๋กํ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค. extends๋ Rabbit.prototype.[[Prototype]]์ Animal.prototype์ผ๋ก ์ค์ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Rabbit.prototype์์ ๋ฉ์๋๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด Animal.Prototype์์ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
ํน๋ณํ ์ฌํญ์ด ์์ผ๋ฉด class Rabbit์ class Animal์ ์๋ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์์๋ฐ๋๋ค.
๊ทธ๋ฐ๋ฐ Rabbit์์ stop()๋ฑ์ ๋ฉ์๋๋ฅผ ์์ฒด์ ์ผ๋ก ์ ์ํ๋ฉด, ์์๋ฐ์ ๋ฉ์๋๊ฐ ์๋ ์์ฒด ๋ฉ์๋๊ฐ prototype ํ๋กํผํฐ์ ์ค์ ๋๋ค.
์ด๋ ๋ง์ฝ, ๋ถ๋ชจ(Animal) ํด๋์ค์ ๋ฉ์๋๋ฅผ ํ ๋๋ก ์ผ๋ถ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ ์ฐ์ด๋ ๊ฒ์ด ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ค.
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ : ์์ ๊ด๊ณ์ ์๋ ๋ถ๋ชจ ํด๋์ค์์ ์ด๋ฏธ ์ ์๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ๊ฐ์ ์๊ทธ๋์ณ๋ฅผ ๊ฐ๋ ๋ฉ์๋๋ก ๋ค์ ์ ์ํ๋ ๊ฒ
cf) ์ค๋ฒ๋ก๋ฉ : ์ค๋ฒ๋ก๋ฉ๊ณผ ํท๊ฐ๋ฆด ์ ์๋๋ฐ ์ค๋ฒ๋ก๋ฉ์ ์๋ก ๋ค๋ฅธ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ํ๋์ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ๋๋ super ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
- super.method(…)๋ ๋ถ๋ชจ ํด๋์ค์ ์ ์๋ ๋ฉ์๋ method๋ฅผ ํธ์ถํ๋ค.
- super(…)๋ ๋ถ๋ชจ ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ, ์์ ์์ฑ์ ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
class Animal { constructor(name) { this.speed = 0; this.name = name; } run(speed) { this.speed = speed; alert(`${this.name}๊ฐ ์๋ ${this.speed}๋ก ๋ฌ๋ฆฝ๋๋ค.`); } stop() { this.speed = 0; alert(`${this.name}๊ฐ ๋ฉ์ท์ต๋๋ค.`); } } class Rabbit extends Animal { hide() { alert(`${this.name}๊ฐ ์จ์์ต๋๋ค!`); } **stop() { super.stop(); // ๋ถ๋ชจ ํด๋์ค์ stop์ ํธ์ถํด ๋ฉ์ถ๊ณ , this.hide(); // ์จ์ต๋๋ค. }** } let rabbit = new Rabbit("ํฐ ํ ๋ผ"); rabbit.run(5); // ํฐ ํ ๋ผ๊ฐ ์๋ 5๋ก ๋ฌ๋ฆฝ๋๋ค. rabbit.stop(); // ํฐ ํ ๋ผ๊ฐ ๋ฉ์ท์ต๋๋ค. ํฐ ํ ๋ผ๊ฐ ์จ์์ต๋๋ค!
์์ฑ์ ์ค๋ฒ๋ผ์ด๋ฉ
์์ ์์์ ๋ฐ๋ฅด๋ฉด, Rabbit์ ์์ฒด constructor๊ฐ ์๋ค.
์ด์ฒ๋ผ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ๊ณ constructor๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์๋์ฒ๋ผ “๋น์ด์๋” constructor๊ฐ ๋ง๋ค์ด์ง๋ค. rabbit ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์์ฑ์๋ก “ํฐ ํ ๋ผ”๋ฅผ ๋ฃ์ ์ ์๋ ์ด์ ์ด๋ค.
class Rabbit extends Animal { // ์์ฒด ์์ฑ์๊ฐ ์๋ ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด ์๋์ผ๋ก ๋ง๋ค์ด์ง constructor(...args) { super(...args); } }
์ด์ Rabbit์ ์ปค์คํ ์์ฑ์๋ฅผ ์ถ๊ฐํด๋ณด์.
์ปค์คํ ์์ฑ์์์ name๊ณผ earLength๋ฅผ ์ง์ ํ๋ฉด,
class Animal { constructor(name) { this.speed = 0; this.name = name; } // ... } class Rabbit extends Animal { constructor(name, earLength) { this.speed = 0; this.name = name; this.earLength = earLength; } // ... } // ๋์ํ์ง ์์ต๋๋ค! let rabbit = new Rabbit("ํฐ ํ ๋ผ", 10); // ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ ์ด์ ๋, ์์ ํด๋์ค์ ์์ฑ์์์๋ ๋ฐ๋์ super(…)๋ฅผ ํธ์ถํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ํธ์ถํ์ง ์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. super(…)๋ this๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ํธ์ถํด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ super(…)๋ฅผ ํธ์ถํด์ผ ํ ๊น?
์๋ฐ์คํฌ๋ฆฝํธ๋ ‘์์ ํด๋์ค์ ์์ฑ์ ํจ์(derived constructor)’์ ๊ทธ๋ ์ง ์์ ์์ฑ์ ํจ์๋ฅผ ๊ตฌ๋ถํ๋ค. ์์ ํด๋์ค์ ์์ฑ์ ํจ์์ ํน์ ๋ด๋ถ ํ๋กํผํฐ์ธ [[ConstructorKind]]:”drived” ๊ฐ ์ด๋ฆํ์ฒ๋ผ ๋ถ๋๋ค.
์ผ๋ฐ ํด๋์ค์ ์์ฑ์ ํจ์์ ์์ ํด๋์ค์ ์์ฑ์ ํจ์ ๊ฐ ์ฐจ์ด๋ new์ ํจ๊ป ๋๋ฌ๋๋ค.
- ์ผ๋ฐ ํด๋์ค๊ฐ new์ ํจ๊ป ์คํ๋๋ฉด ๋น ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ณ this์ ์ด ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ๋ค.
- ๋ฐ๋ฉด, ์์ ํด๋์ค์ ์์ฑ์ ํจ์๊ฐ ์คํ๋๋ฉด, ์ผ๋ฐ ํด๋์ค์ ์ ์ผ์ด๋ ์ผ์ด ์ผ์ด๋์ง ์๋๋ค. ์์ ํด๋์ค์ ์์ฑ์ ํจ์๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ this์ ์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ์ผ์ ๋ถ๋ชจ์ ํด๋์ค ์์ฑ์๊ฐ ์ฒ๋ฆฌํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ค.
์กฐ๊ธ ๋ ์์ธํ ๋ณด์๋ฉด
๐ ์ถ์ฒ : https://velog.io/@dnr6054/deepdive-constructor
์์ฑ์ ํจ์์ ์ธ์คํด์ค ์์ฑ ๊ณผ์
์์ฑ์ ํจ์์ ์ญํ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํ(์ธ์คํด์ค ํ๋กํผํฐ ์ถ๊ฐ ๋ฐ ์ด๊ธฐ๊ฐ ํ ๋น)ํ๋ ๊ฒ์ด๋ค.
// ์์ฑ์ ํจ์ function Circle(radius) { // ์ธ์คํด์ค ์ด๊ธฐํ this.radius = radius; this.getDiameter = function () { return 2 * this.radius; }; } // ์ธ์คํด์ค ์์ฑ const circle1 = new Circle(5); // ๋ฐ์ง๋ฆ์ด 5์ธ Circle ๊ฐ์ฒด๋ฅผ ์์ฑ
์ด ์ฝ๋์์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ์ฝ๋๋ ๋ณด์ด์ง ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ฌต์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ธ์คํด์ค ์์ฑ๊ณผ this ๋ฐ์ธ๋ฉ
์๋ฌต์ ์ผ๋ก ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌต์ ์ผ๋ก ์์ฑ๋ ๋น ๊ฐ์ฒด, ์ฆ ์ธ์คํด์ค๋ this์ ๋ฐ์ธ๋ฉ๋๋ค. ์ด ์ฒ๋ฆฌ๋ ํจ์ ๋ชธ์ฒด์ ์ฝ๋๊ฐ ํ ์ค์ฉ ์คํ๋๋ ๋ฐํ์ ์ด์ ์ ์คํ๋๋ค. - ์ธ์คํด์ค ์ด๊ธฐํ
์์ฑ์ ํจ์์ ๊ธฐ์ ๋์ด ์๋ ์ฝ๋๊ฐ ํ ์ค์ฉ ์คํ๋์ด this์ ๋ฐ์ธ๋ฉ ๋์ด ์๋ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ค. ์ฆ, this์ ๋ฐ์ธ๋ฉ๋์ด ์๋ ์ธ์คํด์ค์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ ์์ฑ์ ํจ์๊ฐ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ด๊ธฐ๊ฐ์ ์ธ์คํด์ค ํ๋กํผํฐ์ ํ ๋นํ์ฌ ์ด๊ธฐํํ๊ฑฐ๋ ๊ณ ์ ๊ฐ์ ํ ๋นํ๋ค. - ์ธ์คํด์ค ๋ฐํ
์์ฑ์ ๋ด๋ถ์ ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ์์ฑ๋ ์ธ์คํด์ค๊ฐ ๋ฐ์ธ๋ฉ ๋ this๊ฐ ์๋ฌต์ ์ผ๋ก ๋ฐํ๋๋ค.
function Circle(radius) { // 1. ์๋ฌต์ ์ผ๋ก ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ this์ ๋ฐ์ธ๋ฉ๋๋ค. // 2. this์ ๋ฐ์ธ๋ฉ๋์ด ์๋ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ค. this.radius = radius; this.getDiameter = function () { return 2 * this.radius; }; // 3. ์์ฑ๋ ์ธ์คํด์ค๊ฐ ๋ฐ์ธ๋ฉ๋ this๊ฐ ์๋ฌต์ ์ผ๋ก ๋ฐํ๋๋ค. } // ์ธ์คํด์ค ์์ฑ. Circle ์์ฑ์ ํจ์๋ ์๋ฌต์ ์ผ๋ก this๋ฅผ ๋ฐํํ๋ค. const circle1 = new Circle(5); console.log(circle); // Circle {radius: 1, getDiameter: f}
๋ค์ ๋์์์,
์ด๋ฌํ ์ฐจ์ด ๋๋ฌธ์ ์์ ํด๋์ค์ ์์ฑ์์์ super๋ฅผ ํธ์ถํด ๋ถ๋ชจ ์์ฑ์๋ฅผ ์คํํด ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด this๊ฐ ๋ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์์์ ๊ฐ์ด this ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ super() ๋ฅผ ํธ์ถํ๋ฉด Rabbit ์ ์์ฑ์๊ฐ ์ ๋๋ก ๋์ํ๋ค.
class Animal { constructor(name) { this.speed = 0; this.name = name; } // ... } class Rabbit extends Animal { constructor(name, earLength) { super(name); this.earLength = earLength; } // ... } // ์ด์ ์๋ฌ ์์ด ๋์ํฉ๋๋ค. let rabbit = new Rabbit("ํฐ ํ ๋ผ", 10); alert(rabbit.name); // ํฐ ํ ๋ผ alert(rabbit.earLength); // 10
- ์ธ์คํด์ค
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ค. ์ฆ, ํ๋์ ํด๋์ค๋ก ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค!(์ฌ์ฌ์ฉ)
- ๊ฐ์ฒด
์ธ์คํด์ค์ ๋ค๋ฅธ๋ง๋ก, ๋ ๋ค ํด๋์ค์ ์ค์ฒด๋ฅผ ๋ํ๋ด๋ ๋ง์ด๋ค. ๋ณดํต ํด๋์ค๋ฅผ ๊ฑฐํธ์ง์ ๋น์ ํ๋๋ฐ ๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ๊ทธ ๊ฑฐํธ์ง์ผ๋ก ๋ง๋ค์ด๋ธ “์ค์ฒด”๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ์๋ฉด, ์ธ์คํด์ค๋ new ํค์๋๋ก ํด๋์ค์ ์ค์ฒด๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ์ฉ์ด์ด๊ณ , ๊ฐ์ฒด๋ ์ธ์คํด์ค ์์ฑ ํ ํด๋์ค์์ ์ ๊ณตํ๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ ์ฉ์ด์ด๋ค.
- ํ๋กํผํฐ
ํด๋์ค ๋ด๋ถ์ ๋ง๋๋ ๋ณ์(๋ฉค๋ฒ๋ณ์)๋ฅผ ํ๋กํผํฐ๋ผ๊ณ ํ๋ค. ํ๋กํผํฐ์๋ ์ฃผ๋ก ๊ฐ์ฒด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ์ ๋ณด์ ๊ฐ์ฒด ๋ด๋ถ ํจ์(๋ฉ์๋)์์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ๊ฐ์ด ์ ์ฅ๋๋ค.
- ๋ฉ์๋
ํด๋์ค ๋ด๋ถ์ ์ ์ธํ ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ํ๋ฉฐ ๋ฉค๋ฒํจ์๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ๋ฉ์๋๋ ์ฃผ๋ก ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝ(setter)ํ๊ฑฐ๋ ์์๋ด๋ ๊ธฐ๋ฅ(getter), ํด๋์ค๋ฅผ ๋ํํ๋ ๊ธฐ๋ฅ ๋ฑ์ด ๋ด๊ธด๋ค.
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ์คํฌ๋ฆฝํธ] Map๊ณผ Set (0) 2023.01.17 [Javascript] ํด๋์ค์ ์ ์ (static)๋ฉ์๋์ ํ๋กํผํฐ, ์์ (0) 2023.01.03 [Javascript] ํ๋กํ ํ์ ๊ณผ ํ๋กํ ํ์ ์์ (0) 2023.01.03 Sync Audio with Text Using Javascript (0) 2022.12.26 Binary / Base64 / Blob / ArrayBuffer / File (0) 2022.12.22