[javascript] Class

Class


class 생성과 사용

  • static 메소드의 개념과 사용법은 자바와 동일함
  • getter와 setter에서 this + 언더바(_)를 붙여주지 않으면 스택 오버플로가 됨
  • 을 붙히면 자바의 private과 동일한 성질을 띄나 아직 지원하는 브라우저가 적음 -> 현재는 사용자제

class Person {
    static species = 'human';

    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    get name() {
        return this._name;
    }

    set name(value) {
        this._name = value;
    }

    get age() {
        return this._age;
    }

    set age(value) {
        this._age = value < 0 ? 0 : value;
        //set한 age가 음수일 경우 0으로 처리함(안정성을 위해)
    }

    toString() {
        return `name: ${this.name} and age: ${this.age}`;
    }

    speak() {
        console.log(`${this.name}, hello!`);
    }

    static saySpecies(){
        console.log(`We are ${this.species}`);
    }

}
  • 자바와 유사하게 사용가능
const woogie = new Person('woogie', -5);

console.log(woogie);          -> Person {_name: "woogie", _age: 0}
console.log(woogie.name);     -> woogie
console.log(woogie.age);      -> 0

woogie.age = 28;              

console.log(woogie);          -> Person {_name: "woogie", _age: 28}
console.log(woogie.name);     -> woogie
console.log(woogie.age);      -> 28
                              -> 
woogie.speak();               -> woogie, hello!
                              -> 
console.log(Person.species);  -> human
Person.saySpecies();          -> We are human

상속과 다형성

  • 자바와 마찬가지로 상속을 사용할 수 있음
  • 메소드 오버라이딩이 가능함
  • super.함수이름() 이면 부모 클래스의 함수를 사용 가능
class Korean extends Person {}

const koreanWoogie = new Korean('우기', 28);
console.log(koreanWoogie); -> Korean {_name: "우기", _age: 28}
koreanWoogie.speak(); -> 우기, hello!

class Japaneese extends Person {
    //메소드 오버라이딩
    speak() {
        console.log(`${this.name}, おはよう!`);
    }

    orgSpeak() {
        super.speak();
    }
}

const JapaneeseWoogie = new Japaneese('ウギ', 28);
console.log(JapaneeseWoogie); -> Japaneese {_name: "ウギ", _age: 28}
JapaneeseWoogie.speak();     -> ウギ, おはよう!
JapaneeseWoogie.orgSpeak();  -> ウギ, hello!

instanceOf

  • 해당 클래스의 객체가 맞는 지 true와 false를 반환
  • 모든 클래스는 자바와 마찬가지로 Object를 상속 받는다.
console.log(koreanWoogie instanceof Korean);    -> true
console.log(koreanWoogie instanceof Japaneese); -> false
console.log(koreanWoogie instanceof Person);    -> true
console.log(koreanWoogie instanceof Object);    -> true

links

social