Class & Constructor & Method

Class

class Food {

}

export default Food;

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ์„ค๊ณ„๋„๋‹ค. ํด๋ž˜์Šค์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐ์–ด๋‚ธ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค ์„ ์–ธ์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ ํด๋ž˜์Šค ์„ ์–ธ์€ hoisting๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. (๋งจ ๋งˆ์ง€๋ง‰ ๋ผ์ธ export default Animal์€ Animal.js ํŒŒ์ผ์—์„œ Animal ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€๋กœ exportํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋‹ค. ํด๋ž˜์Šค ์™ธ์—๋„ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ๋“ฑ์„ exportํ•  ๋•Œ๋„ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)

ํด๋ž˜์Šค ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋์ง€๋งŒ, ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด ์ง„์งœ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰๊ฐ์ฒด๋‹ค. ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ์ด ๋„์ž…๋œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋ฌธ๋ฒ•์ ์œผ๋กœ๋งŒ ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์ฝ˜ํ…์ŠคํŠธ์—์„œ hoisting๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๋งŒ ๋นผ๋ฉด ์œ„ ์ฝ”๋“œ๋Š” function Animal() { }๊ณผ ๊ฐ™๋‹ค.

// index.js
import Food from './Food ';

let anim = new Food();

๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ Animal ํด๋ž˜์Šค์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์šฐ์„  Animal ํด๋ž˜์Šค๋ฅผ importํ•ด์•ผ ํ•œ๋‹ค. (์•ž์„œ export default Animal ๋ผ์ธ์„ ์ž‘์„ฑํ•œ ์ด์œ ๋‹ค.) anim ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด Animal์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ anim์€ Animal ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜(Reference variable)์ด๋ฉฐ, ์ธ์Šคํ„ด์Šค(Instance)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํด๋ž˜์Šค๋ผ๋Š” ์„ค๊ณ„๋„๋ฅผ ์ด์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ผ๋Š” ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

Constructor(์ƒ์„ฑ์ž)

// Animal.js
class Food {
    constructor(name) {
    
    }
}

export default Food ;

ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ constructor๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. constructor๋Š” new Animal(); ๋ช…๋ น์„ ํ†ตํ•ด ์‹คํ–‰๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋˜ํ•œ constructor์—๋Š” name์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‘˜ ์ˆ˜๋„ ์žˆ๋‹ค. ๋งŒ์•ฝ constructor๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋น„์–ด์žˆ๋Š” default constructor๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๊ตณ์ด ๋นˆ constructor๋ฅผ ๋งŒ๋“ค ํ•„์š”๋Š” ์—†๋‹ค.

Instance variable(์ธํ„ฐํŽ˜์ด์Šค ๋ณ€์ˆ˜)

// Food .js
class Food {
    constructor(name) {
        this.name = name;
    }
}

export default Food;

ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ”„๋กœํผํ‹ฐ๋Š” constructor ์•ˆ์— ์„ ์–ธํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ์ด๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(Instance variable)๋ผ๊ณ  ๋ถ€๋ฅด์ง€๋งŒ, ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ ํด๋ž˜์Šค๋Š” ์‚ฌ์‹ค ํ•จ์ˆ˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— this.name์€ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํ”„๋กœํผํ‹ฐ(Property)๋‹ค.

// index.js
import Food from './Food ';

let anim = new Food ('Jake');

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค. Food ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ name์˜ ๊ฐ’์€ 'Jakeโ€™๋‹ค.

Method

// Animal.js
class Food {
    constructor(name) {
        this.name = name;
    }
    
    getName() {
        return this.name;
    }
}

export default Food;

๋ฉ”์†Œ๋“œ๋Š” ํ•จ์ˆ˜์™€ ๋น„์Šทํ•˜๋ฉฐ, ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด์˜ ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค. getName() ๋ฉ”์†Œ๋“œ๋Š” Animal ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ์ธ this.name์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

// index.js
import Animal from './Animal';

let anim = new Animal('Jake');

console.log(anim.getName()); // 'Jake'

ํ˜ธ์ถœ ์—ญ์‹œ ์ง๊ด€์ ์ด๋‹ค.

EX1) ์˜ˆ์‹œ

class Food {
  constructor(name) {
    this.name = name;
    this.brands = [];
  }
  addBrand(brand) {
    this.brands.push(brand);
  }
  print() {
    console.log(`${this.name}์„ ํŒŒ๋Š” ์Œ์‹์ ๋“ค:`);
    console.log(this.brands.join(", "));
  }
}

const pizza = new Food('ํ”ผ์ž');
pizza.addBrand('ํ”ผ์žํ—›');
pizza.addBrand('๋„๋ฏธ๋…ธ ํ”ผ์ž');


const chicken = new Food('์น˜ํ‚จ');
chicken.addBrand('๊ตฝ๋„ค์น˜');
chicken.addBrand('BBQ');

pizza.print();
chicken.print();
// ๊ฒฐ๊ณผ)

ํ”ผ์ž์„ ํŒŒ๋Š” ์Œ์‹์ ๋“ค: 
ํ”ผ์žํ—›, ๋„๋ฏธ๋…ธ ํ”ผ์ž 
์น˜ํ‚จ์„ ํŒŒ๋Š” ์Œ์‹์ ๋“ค: 
๊ตฝ๋„ค์น˜, BBQ 

Last updated