728x90
자바나 파이썬처럼 클래스를 사용하는 언어에 익숙한 사람들을 위해 자바스크립트에서도 클래스가 개발되었습니다. 자바스크립트의 클래스는 ES6부터 만들어졌기 때문에 이전의 만들어진 자바스크립트 문법에 비해 엄격합니다.
1. constructor 메서드
자바스크립트에서 constructor 메서드는 파이썬의 __init__ 메서드처럼 초기화를 해주는 메서드라고 생각하면 됩니다.
class Person {
constructor (name, age, married = false) {
this.name = name;
this.age = age;
this.married = married;
}
}
const person1 = new Person('zero', 30, true);
const person2 = new Person('week', 18);
console.log(
person1, //Person {name: 'zero', age: 30, married: true}
person2 //Person {name: 'week', age: 18, married: false}
);
다만 인스턴스 초기화가 필요없는 클래스에서는 constructor 메서드를 생략해도 됩니다.
class Empty {}
console.log(new Empty()); //Empty {}
2. 필드
필드란 constructor 밖에서 this 키워드 없이 인스턴스의 프로퍼티를 정의하는 것을 말합니다.
따라서 필드를 사용하게 되면 constructor 메서드를 사용하지 않아도 됩니다.
class Slime {
hp = 50; //필드값
op = 4; //필드값
attack (enemy) {
enemy.hp -= this.op;
this.hp += this.op/4;
}
}
const slime1 = new Slime();
const slime2 = new Slime();
console.log(
slime1, // Slime {hp: 50, op: 4}
slime2 //Slime {hp: 50, op: 4}
);
slime1.attack(slime2);
console.log(
slime1, //Slime {hp: 51, op: 4}
slime2 //Slime {hp: 46, op: 4}
);
또한 이러한 필드는 디폴트값을 지정했을 때도 사용합니다.
class PizzaShop {
no = 0;
menu = { '페퍼로니': 10000, '포테이토': 12000 };
constructor (name, no) {
this.name = name;
if (no) this.no = no;
}
introduce () {
return `안녕하세요, ${this.no}호 ${this.name}점입니다!`;
}
order (name) {
return `${this.menu[name]}원입니다.`
}
}
const chain0 = new PizzaShop('(미정)');
//파라미터로 no값을 전달받지 못했기 때문에 필드값이 없다면 클래스의 this.no = undifined가 됨
//현재는 필드값이 있기 때문에 no의 값은 0이 됨
console.log(chain0, chain0.introduce()); //PizzaShop {no: 0, menu: {…}, name: '(미정)'} '안녕하세요, 0호 (미정)점입니다!'
const chain1 = new PizzaShop('판교', 3); // 파라미터로 no값이 있기 때문에 no의 값은 3이 됨
console.log(chain1, chain1.introduce()); // PizzaShop {no: 3, menu: {…}, name: '판교'} '안녕하세요, 3호 판교점입니다!'
chain1.menu['페퍼로니'] = 13000; // chain1 인스턴스의 필드값만 변경
console.log(
chain0.order('페퍼로니'), // 10000원입니다.
chain1.order('페퍼로니') //13000원입니다.
);
3. static 필드와 메서드
static필드와 메서드는 클래스에서 공용으로 사용하는 필드값과 메서드라고 생각하시면 됩니다.
class PizzaShop {
// 정적 변수와 메서드
static brand = '피자샵';
static contact () {
return `${this.brand}입니다. 무엇을 도와드릴까요?`;
}
constructor (name, no) {
this.name = name;
this.no = no;
}
introduce () {
return `안녕하세요, ${this.no}호 ${this.name}점입니다!`;
}
}
console.log(PizzaShop.contact()); //피자샵입니다. 무엇을 도와드릴까요?
'JAVASCRIPT Programming > Javascript' 카테고리의 다른 글
[JavaScript] 상속 (0) | 2024.08.15 |
---|---|
[JavaScript] 접근자 프로퍼티 (0) | 2024.08.13 |
[JavaScript] 객체 (0) | 2024.08.06 |
[JavaScript] 일급 객체 (0) | 2024.07.25 |
[JavaScript] 제어문 (0) | 2024.07.21 |