Class

JS์—์„œ๋„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ‘œํ˜„์‹

class ๋ฅผ ์ด์šฉํ•ด ์„ ์–ธํ•˜๊ณ  new๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑ

class User {
  constructor(name) {
    //์ƒ์„ฑ์ž
    this.name = name;
  }

  sayHi() {
    alert(this.name);
  }
}

let user = new User('John');
user.sayHi();
alert(typeof User); // function
alert(User === User.prototype.constructor); // true
alert(User.prototype.sayHi); // alert(this.name);
alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi
  • ๊ธฐ๋ช… ํ‘œํ˜„์‹

let User = class {
  sayHi() {
    alert('Hello');
  }
};
new User().sayHi();

alert(MyClass); //error
  • ํด๋ž˜์Šค ๋™์  ์ƒ์„ฑ

function makeClass(phrase) {
  // ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•จ
  return class {
    sayHi() {
      alert(phrase);
    }
  };
}

// ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ฆ
let User = makeClass('Hello');

new User().sayHi(); // Hello

์›๋ฆฌ

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ User๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ํ•จ์ˆ˜๋Š” ์ƒ์„ฑ์žconstructor๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜๊ณ  ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์„œ๋“œ๋“ค์€ User.prototype์— ์ €์žฅํ•œ๋‹ค

์ผ๋ฐ˜์ ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ์ 

  1. class๋กœ ๋งŒ๋“  ํ•จ์ˆ˜์—” ํŠน์ˆ˜ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ์ธ [[FunctionKind]]:"classConstructor"๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ new๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ  User();์™€ ๊ฐ™์ด ๊ทธ๋ƒฅ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ž˜๋ชป ์‚ฌ์šฉ๋œ๊ฒƒ์„ ๊ฐ์ง€ํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

  2. prototype์˜ ๋ฉ”์„œ๋“œ ์ „์ฒด์˜ enumerableํ”Œ๋ž˜๊ทธ๋Š” false๋กœ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” ์—ด๊ฑฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.

  3. ํ•ญ์ƒ use strict๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜์–ด ํด๋ž˜์Šค ์ƒ์„ฑ์ž ์•ˆ์˜ ์ฝ”๋“œ ์ „์ฒด์— ์ž๋™์œผ๋กœ ์—„๊ฒฉ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋œ๋‹ค.

getter/setter

๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ๊ฐ์ฒด์ฒ˜๋Ÿผ getter/setter๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

class User {
  constructor(name) {
    // setter๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
    this.name = name;
  }

  get name() {
    return this._name;
  }

  set name(value) {
    if (value.length < 4) {
      alert('์ด๋ฆ„์ด ๋„ˆ๋ฌด ์งง์Šต๋‹ˆ๋‹ค.');
      return;
    }
    this._name = value;
  }
}

let user = new User('John');
alert(user.name); // John

user = new User(''); // ์ด๋ฆ„์ด ๋„ˆ๋ฌด ์งง์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ํ•„๋“œ

ํ”„๋กœํผํ‹ฐ์ด๋ฆ„ = ๊ฐ’ ์œผ๋กœ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, Obj.prototype์ด ์•„๋‹Œ ๊ฐœ๋ณ„ ๊ฐ์ฒด์—๋งŒ ํด๋ž˜์Šค ํ•„๋“œ๊ฐ€ ์„ค์ •๋œ๋‹ค.

class User {
  name = 'John';
}

let user = new User();
alert(user.name); // John
alert(User.prototype.name); // undefined

Last updated