๐Ÿ“– ํด๋ž˜์Šค

c_yjยท2022๋…„ 6์›” 30์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
22/42
post-thumbnail

โœ”๏ธ ํด๋ž˜์Šค๋Š” ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฌธ๋ฒ•์  ์„คํƒ•์ธ๊ฐ€?

ํด๋ž˜์Šค์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋ช‡๊ฐ€์ง€ ์ฐจ์ด โญ•๏ธ

  • ํด๋ž˜์Šค๋ฅผ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ New ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends ์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํด๋ž˜์Šค๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.
    ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ์„ ์–ธ์‹์œผ๋กœ ์ •์˜๋œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์–ด ์‹คํ–‰๋˜๋ฉฐ strict mode๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” strict mode ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ํด๋ž˜์Šค์˜ constructor. ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋‘ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ [[Enumerable]]์˜ ๊ฐ’์ด false๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์—ด๊ฑฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

โœ”๏ธ ํด๋ž˜์Šค ์ •์˜

  • ํด๋ž˜์Šค๋Š” Class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.
  • ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋””๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ผ๋ฐ˜์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ํ‘œํ˜„์‹์œผ๋กœ๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ–์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜์ด์ž ์ผ๊ธ‰ ๊ฐ์ฒด๋‹ค.

์ผ๊ธ‰ ๊ฐ์ฒด๋กœ์„œ์˜ ํŠน์ง•โญ•๏ธ

  • ๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋Ÿฐํƒ€์ž„์— ์ƒ์„ฑ์ด ๊ฐ€๋Šฅ
  • ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ž˜์Šค ๋ชธ์ฒด์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” Constructor(์ƒ์„ฑ์ž), ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.

โœ”๏ธ ํด๋ž˜์Šค ํ˜ธ์ด์ŠคํŒ…

ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ๊ฐ™์ด ์†Œ์Šค์ฝ”๋“œ ํ‰๊ฐ€ ๊ณผ์ •, ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋จผ์ € ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ
์ƒ์„ฑ
ํ•œ๋‹ค.

ํด๋ž˜์Šค๊ฐ€ ํ‰๊ฐ€๋˜์–ด ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์†Œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜, ์ฆ‰ constructor๋‹ค.

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ํ”„๋กœํ† ํƒ€์ž…๋„ ๋”๋ถˆ์–ด ์ƒ์„ฑ๋œ๋‹ค.

  • ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋‹จ๋…์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์—†๊ณ  ์Œ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ

ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ๋„ ๋ณ€์ˆ˜ ์„ ์–ธ, ํ•จ์ˆ˜ ์ •์˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค! ๋‹จ, ํด๋ž˜์Šค๋Š” let, const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ด์ŠคํŒ…

var, let, const, function, function*, class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ํ˜ธ์ด์ŠคํŒ…๋œ๋‹ค. ๋ชจ๋“  ์„ ์–ธ๋ฌธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋จผ์ € ์‹คํ–‰

โœ”๏ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ด๋ฉฐ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

class Person {}

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
const me = new Person();
console.log(me); // Person {} 

ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์กด์žฌ ์ด์œ ์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ผ ํ˜ธ์ถœํ•ด์•ผ ํ•จ!

โœ”๏ธ ๋ฉ”์„œ๋“œ

โœ๏ธ constructor

constructor๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ˆ˜ํ•œ ๋ฉ”์„œ๋“œ๋‹ค. ์ด๋ฆ„๋ณ€๊ฒฝโŒ

  • ํด๋ž˜์Šค๋Š” ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.
  • ํด๋ž˜์Šค๋„ ํ•จ์ˆ˜ ๊ฐ์ฒด ๊ณ ์œ ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ž์‹ ์˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ๊ตฌ์„ฑ

์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ constructor ๋‚ด๋ถ€์—์„œ this์— ์ถ”๊ฐ€ํ•œ ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋œ๋‹ค.
constructor ๋‚ด๋ถ€์˜ this ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

constructor๋Š” ๋ฉ”์„œ๋“œ๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค๊ฐ€ ํ‰๊ฐ€๋˜์–ด ์ƒ์„ฑํ•œ ํ•จ์ˆ˜ ๊ฐ์ฒด ์ฝ”๋“œ์˜ ์ผ๋ถ€๊ฐ€ ๋œ๋‹ค.

โœ๏ธ ํด๋ž˜์Šค์˜ constructor ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํ† ํƒ€์ž…์˜ constructor ํ”„๋กœํผํ‹ฐ๋Š” ์ด๋ฆ„์ด ๊ฐ™์•„ ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์˜ constructor ํ”„๋กœํผํ‹ฐ๋Š” ๋ชจ๋“  ํ”„๋กœํ† ํƒ€์ž…์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์ด๋ฉฐ, ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

constructor์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด

  • constructor์™€๋Š” ํด๋ž˜์Šค ๋‚ด์— ์ตœ๋Œ€ ํ•œ ๊ฐœ๋งŒ ์กด์žฌ, 2๊ฐœ์ด์ƒ์ด๋ฉด Error!
  • constructor๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ
    • ์ƒ๋žตํ•˜๋ฉด ๋นˆ constructor๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ •์˜ constructor๋ฅผ ์ƒ๋žตํ•œ ํด๋ž˜์Šค๋Š” ๋นˆ constructor์— ์˜ํ•ด ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  • ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ดˆ๊ธฐํ™”๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด constructor ๋‚ด๋ถ€์—์„œ this ์— ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

โœ๏ธ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

function Person(name) {
  this.name = name;
}

// ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ
Person.prototype.sayHi = function () {
  console.log(`Hi! My name is ${this.name}`);
};

const me = new Person('Lee');
me.sayHi(); // Hi! My name is Lee

ํด๋ž˜์Šค ๋ชธ์ฒด์—์„œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋ž˜์Šค์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๊ฐ€ ๋œ๋‹ค

class Person {
  // ์ƒ์„ฑ์ž
  constructor(name) {
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”
    this.name = name;
  }

  // ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ
  sayHi() {
    console.log(`Hi! My name is ${this.name}`);
  }
}

const me = new Person("Lee");
me.sayHi(); // Hi! My name is Lee

์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์˜ ์ผ์›์ด ๋œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์€ ๊ธฐ์กด์˜ ๋ชจ๋“  ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

โœ๏ธ ์ •์  ๋ฉ”์„œ๋“œ

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ
ํด๋ž˜์Šค์—์„œ๋Š” ๋ฉ”์„œ๋“œ์— static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ๋œ๋‹ค.

class Person {
  // ์ƒ์„ฑ์ž
  constructor(name) {
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”
    this.name = name;
  }
  
  // ์ •์  ๋ฉ”์„œ๋“œ
  static sayHi() {
    console.log('Hi!');
  }
}

์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์— ๋ฐ”์ธ๋”ฉ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋œ๋‹ค.
ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์ •์˜(ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์ด๋‚˜ ํด๋ž˜์Šค ํ‘œํ˜„์‹)๊ฐ€ ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์— ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋˜๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค์™€ ๋‹ฌ๋ฆฌ ๋ณ„๋‹ค๋ฅธ ์ƒ์ • ๊ณผ์ •์ด ํ•„์š” ์—†๋‹ค.
์ •์ ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ์ •์˜ ์ดํ›„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์ •์  ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด

  • ์ •์  ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์ด ์†ํ•ด ์žˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด ๋‹ค๋ฅด๋‹ค.
  • ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค๋กœ ํ˜ธ์ถœํ•˜๊ณ  ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ ํ˜ธ์ถœํ•˜๋‚Ÿ.
  • ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ •์  ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    ์ฆ‰, ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this ๋ฐ”์ธ๋”ฉ์ด ๋‹ค๋ฅด๋‹ค.

โœ๏ธ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ์˜ ํŠน์ง•

  • function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋–„๋Š” ์ฝค๋งˆ๊ฐ€ ํ•„์š” ์—†๋‹ค.
  • ์•”๋ฌต์ ์œผ๋กœ strict mode ๋กœ ์‹คํ–‰๋œ๋‹ค.
  • for...in๋ฌธ์ด๋‚˜ Object.keys ๋ฉ”์„œ๋“œ ๋“ฑ์œผ๋กœ ์—ด๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค.์ฆ‰, ํ”„๋กœํผํ‹ฐ ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ [[Enumerable]]์˜ ๊ฐ’์ด false๋‹ค.
  • ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ [[Construct]] ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” non-constructor ์ด๋‹ค. ๋”ฐ๋ผ์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๋—ด ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

โœ”๏ธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •

new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ [[Construct]]๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ํด๋ž˜์Šค๋Š” new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

  • 1 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ this ๋ฐ”์ธ๋”ฉ
    new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด constructor ์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ์— ์•ž์„œ ์•”๋ฌต์ ์œผ๋กœ ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ๋นˆ ๊ฐ์ฒด๊ฐ€ (์™„์„ฑ๋œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ) ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์ด๋‹ค
    ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ํด๋ž˜์Šค์˜ prototype ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๊ฐ€ ์„ค์ •๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ๋œ ๋นˆ ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค๋Š” this์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ constructor ๋‚ด๋ถ€์˜ this๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • 2 ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”
    constructor์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด this์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. this์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  constructor๊ฐ€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ดˆ๊ธฐํ™”, constructor๊ฐ€ ์ƒ๋žต๋˜์—ˆ๋‹ค๋ฉด ์ด ๊ณผ์ •๋„ ์ƒ๋žต.

  • 3 ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
    ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์™„์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ this๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋จ

class Person {
  // ์ƒ์„ฑ์ž
  constructor(name) {
    // 1. ์•”๋ฌต์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  this์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
    console.log(this); // Person {}
    console.log(Object.getPrototypeOf(this) === Person.prototype); // true

    // 2. this ์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    this.name = name;

    // 3. ์™„์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ this ๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.
  }
}

const test = new Person("์ง€์˜");
console.log(test);

โœ”๏ธ ํ”„๋กœํผํ‹ฐ

โœ๏ธ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ

์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋Š” constructor ๋‚ด๋ถ€์—์„œ ์ •์˜ํ•ด์•ผ ํ•จ.
constructor ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— constructor ๋‚ด๋ถ€์˜ this์—๋Š” ์ด๋ฏธ ํด๋ž˜์Šค๊ฐ€ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜๋ฉฐ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์ธ ๋นˆ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋˜์–ด์žˆ๋‹ค.
constructor ๋‚ด๋ถ€์—์„œ this์— ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋กœ์จ ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

โœ๏ธ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

์ž์ฒด์ ์œผ๋กœ๋Š” ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ๋‹ค.

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  // fullName ์€ ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋‹ค.
  // getter ํ•จ์ˆ˜
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }

  // setter ํ•จ์ˆ˜
  set fullName(name) {
    [this.firstName, this.lastName] = name.split(" ");
  }
}

const me = new Person("ungmo", "Lee");

// ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ €์žฅ
console.log(`${me.firstName} ${me.lastName}`); // ungmo Lee

// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ €์žฅ
// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ fullName์— ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด setter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
me.fullName = "Heegun Lee";
console.log(me); // {firstName: 'Heegun', lastName: 'Lee'}

// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ฐธ์กฐ
// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ fullName ์— ์ ‘๊ทผํ•˜๋ฉด getter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
console.log(me.fullName); // Heegun Lee

// fullName์€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋‹ค.
// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” get, set, enumerable, configurable ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
console.log(Object.getOwnPropertyDescriptor(Person.prototype, "fullName"));
// {get: f, set: f, enumerable: false, configurable: true}

์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” ์ž์ฒด์ ์œผ๋กœ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜, getterํ•จ์ˆ˜์™€ setter ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ

  • getter
    • ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ๋–„๋งˆ๋‹ค ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„์˜ ํ–‰์œ„๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ
    • ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์•ž์— get ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ •์˜
  • setter
    • ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„์˜ ํ–‰์œ„๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ
    • ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์•ž์— set ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ •์˜

getter์™€ setter ์ด๋ฆ„์€ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผ์น˜๋Ÿผ ์‚ฌ์šฉ. ๋‹ค์‹œ ๋งํ•ด getter๋Š” ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ ์ฐธ์กฐํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฐธ์กฐ ์‹œ์— ๋‚ด๋ถ€์ ์œผ๋กœ getter๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค, setter๋„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ• ๋‹น ์‹œ์— ๋‚ด๋ถ€์ ์œผ๋กœ setter๊ฐ€ ํ˜ธ์ถœ

getter๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ทจ๋“ํ•  ๋–„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ณ  setter๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. setter๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ํ• ๋‹น๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์„ ์–ธ

โœ๏ธ ํด๋ž˜์Šค ํ•„๋“œ ์ •์˜ ์ œ์•ˆ

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

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค์—์„œ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ constructor ๋‚ด๋ถ€์—์„œ this์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค์—์„œ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ this๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค.
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ this๋Š” ์–ธ์ œ๋‚˜ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค ๋ชธ์ฒด์—๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ž˜์Šค ํ•„๋“œ ์ •์˜ ์ œ์•ˆ์œผ๋กœ ์ธํ•ด ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋–„ ์™ธ๋ถ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด constructor์—์„œ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ธฐ์กด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ ,
  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋–„ ์™ธ๋ถ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ๊ธฐ์กด์˜ constructor์—์„œ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š”ใ„ด ๋ฐฉ์‹๊ณผ ํด๋ž˜์Šค ํ•„๋“œ ์ •์˜ ์ œ์•ˆ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ private ํ•„๋“œ ์ •์˜ ์ œ์•ˆ

์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์–ธ์ œ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ž˜์Šค ํ•„๋“œ ์ •์˜ ์ œ์•ˆ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํด๋ž˜์Šค ํ•„๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ publicํ•˜๊ธฐ ๋–„๋ฌธ์— ์™ธ๋ถ€์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋œ๋‹ค.

public ํ•„๋“œ๋Š” ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ private ํ•„๋“œ๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ static ํ•„๋“œ ์ •์˜ ์ œ์•ˆ

static publicํ•„๋“œ, static private ํ•„๋“œ, static private ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ‘œ์ค€ ์‚ฌ์–‘์ด ์ œ์•ˆ๋˜์–ด ์žˆ๋‹ค. ์ด ์ œ์•ˆ ์ค‘์—์„œ static public/private ํ•„๋“œ๋Š” ํ˜„์žฌ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

โœ”๏ธ ์ƒ์†์— ์˜ํ•œ ํด๋ž˜์Šค ํ™•์žฅ

โœ๏ธ ํด๋ž˜์Šค ์ƒ์†๊ณผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ƒ์†

ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ƒ์†์€ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ž์‚ฐ์„ ์ƒ์†๋ฐ›๋Š” ๊ฐœ๋…์ด์ง€๋งŒ ์ƒ์†์— ์˜ํ•œ ํด๋ž˜์Šค ํ™•์žฅ์€ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ํ†ตํ•ด ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค
  • ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ํ†ตํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ธ extends ํ‚ค์›Œ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋œ๋‹ค.
    • extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค ํ™•์žฅ์€ ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์™€ ๊ฐ™์ด ์ƒ์†์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด ์ œ๊ณต๋˜์ง€ ์•Š์Œ.

โœ๏ธ extends ํ‚ค์›Œ๋“œ

์ƒ์†์„ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†๋ฐ›์„ ํด๋ž˜์Šค๋ฅผ ์ •์˜

์ƒ์†์„ ํ†ตํ•ด ํ™•์žฅ๋œ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๋ผ ๋ถ€๋ฅด๊ณ , ์„œ๋ธŒํด๋ž˜์Šค์—๊ฒŒ ์ƒ์†๋œ ํด๋ž˜์Šค๋ฅผ ์ˆ˜ํผํด๋ž˜์Šค๋ผ ๋ถ€๋ฅธ๋‹ค, ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ํŒŒ์ƒ ํด๋ž˜์Šค ๋˜๋Š” ์ž์‹ ํด๋ž˜์Šค, ์ˆ˜ํผํด๋ž˜์Šค๋ฅผ ๋ฒ ์ด์Šค ํด๋ž˜์Šค ๋˜๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

extends ํ‚ค์›Œ๋“œ์˜ ์—ญํ• ์€ ์ˆ˜ํผํด๋ž˜์Šค์™€ ์„œ๋ธŒํด๋ž˜์Šค ๊ฐ„์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

โœ๏ธ ๋™์  ์ƒ์†

extends ํ‚ค์›Œ๋“œ๋Š” ํด๋ž˜์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์•„ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹จ, extends ํ‚ค์›Œ๋“œ ์•ž์—๋Š” ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค๊ฐ€ ์™€์•ผ ํ•œ๋‹ค.

extends ํ‚ค์›Œ๋“œ ๋‹ค์Œ์—๋Š” ํด๋ž˜์Šค๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ [[Construct]] ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor

์„œ๋ธŒํด๋ž˜์Šค์—์„œ constructor๋ฅผ ์ƒ๋žตํ•˜๋ฉด ํด๋ž˜์Šค์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ constructor๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ •์˜๋จ. args๋Š” new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ผ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•  ๋–„ ์ „๋‹ฌํ•œ ์ธ์Šค์˜ ๋ฆฌ์ŠคํŠธ๋‹ค.

constructor(...args) { super(...args);}

โœ๏ธ super ํ‚ค์›Œ๋“œ

super ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ  this์™€ ๊ฐ™์ด ์‹๋ณ„์ž์ฒ˜๋Ÿผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ํ•œ ํ‚ค์›Œ๋“œ๋‹ค. super๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

  • super๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • super๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ˆ˜ํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ super๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์Šˆํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.super ํ˜ธ์ถœ
super ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor(super-constructor)๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ๋‚ด๋ถ€์—์„œ ์ถ”๊ฐ€ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ–๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด,
    ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ด ๋•Œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ „๋‹ฌํ•œ ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์„œ๋ธŒํด๋ž˜์Šค์— ์•”๋ฌต์ ์œผ๋กœ ์ •์˜๋œ constructor์˜ super ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ์— ์ „๋‹ฌ๋œ๋‹ค.

  • ์ˆ˜ํผํด๋ž˜์Šค์—์„œ ์ถ”๊ฐ€ํ•œ ํ”„๋กœํผํ‹ฐ์™€ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์ถ”๊ฐ€ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด,
    ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
    ์ด ๋•Œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ „๋‹ฌํ•œ ์ธ์ˆ˜ ์ค‘์—์„œ ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ์— ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์ธ์ˆ˜๋Š” ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ ํ˜ธ์ถœํ•˜๋Š” super ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•œ๋‹ค.

โœ”๏ธ super๋ฅผ ํ˜ธ์ถœ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ์„œ๋ธŒํด๋ž˜์Šค์—์„œ constructor๋ฅผ ์ƒ๋žตํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ super ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  • ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์—๋Š” this๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
  • super๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.
    ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์˜ constructor๋‚˜ ํ•จ์ˆ˜์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โœ๏ธ super ์ฐธ์กฐ
๋ฉ”์„œ๋“œ ๋‚ด์—์„œ super๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์Šˆํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์„œ๋ธŒํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ super. ์œผ๋กœ ์ ‘๊ทผํ•œ ๋ฉ”์„œ๋„๋Š” ์Šˆํผํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    super ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์ˆ˜ํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด super๊ฐ€ ์ˆ˜ํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ์ฒด, ์ฆ‰ ์ˆ˜ํผํด๋ž˜์Šค์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ๋œ ํ”„๋กœํ† ํƒ€์ž…์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ.

์ฃผ์˜ํ•  ๊ฒƒ์€ ES6์˜ ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋งŒ์ด [[HomeObject]]๋‚ด๋ถ€ ์Šฌ๋กฏ์„ ๊ฐ€์ง„๋‹ค.

[[HomeObject]]๋‚ด๋ถ€ ์Šฌ๋กฏ์„ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜๋งŒ์ด super๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ [[HomeObject]]๋‚ด๋ถ€ ์Šฌ๋กฏ์„ ๊ฐ€์ง€๋Š” ES6์˜ ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋งŒ์ด super ์ฐธ์กฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ super ์ฐธ์กฐ๋Š” ์ˆ˜ํผํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„œ๋ธŒํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  1. ์„œ๋ธŒํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ super. ๋Š” ์ˆ˜ํผํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

โœ๏ธ ์ƒ์† ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •

1. ์„œ๋ธŒํด๋ž˜์Šค์˜ super ํ˜ธ์ถœ

์„œ๋ธŒํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์ง์ ‘ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ˆ˜ํผํด๋ž˜์Šค์—๊ฒŒ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์œ„์ž„ํ•œ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ ๋ฐ˜๋“œ์‹œ super๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋‹ค.

2. ์ˆ˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ this๋ฐ”์ธ๋”ฉ

์ˆ˜ํผํด๋ž˜์Šค์˜ consturctor ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „์— ์•”๋ฌต์ ์œผ๋กœ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋นˆ ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๋นˆ ๊ฐ์ฒด, ์ฆ‰ ์ธ์Šคํ„ด์Šค๋Š” this์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด

์ธ์Šคํ„ด์Šค๋Š” ์ˆ˜ํผํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋œ ํด๋ž˜์Šค๊ฐ€ ์„œ๋ธŒํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ฆ‰, new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ผ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” new.target์€ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด. ๋”ฐ๋ผ์„œ ์ธ์Šคํ„ด์Šค๋Š” new.target์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ

3. ์ˆ˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”

this ์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ 
constructor ๊ฐ€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›๋Š” ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

4. ์„œ๋ธŒํด๋ž˜์Šค constructor๋กœ์˜ ๋ณต๊ท€์™€ this ๋ฐ”์ธ๋”ฉ

super๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ this์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ์„œ๋ธŒํด๋ž˜์Šค๋Š” ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  super๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ this์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

์ด์ฒ˜๋Ÿผ super๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ, this ๋ฐ”์ธ๋”ฉ๋„ ํ•  ์ˆ˜ ์—†๋‹ค. ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์—๋Š” this๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์ด ๋–„๋ฌธ์ด๋‹ค.

5. ์„œ๋ธŒํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”

super ํ˜ธ์ถœ ์ดํ›„, ์„œ๋ธŒ ํด๋ž˜์Šค์˜ constructor์— ๊ธฐ์ˆ ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
์ฆ‰ this ์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,
constructor ๊ฐ€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›์€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

6. ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์™„์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ this ๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

profile
FrontEnd Developer

0๊ฐœ์˜ ๋Œ“๊ธ€