본문 바로가기
인터페이스 개발/javascript

Javascript - 클래스 for ES6

by cooluk 2020. 9. 21.

클래스 for ES 6

 

class 정의

 

class 키워드

  • 객체의 원형을 정의하는 키워드

  • ES6(ES2015)에서 추가
    class 클래스명 { }

생성자

  • constructor() 함수로 정의
    • this 객체가 새로 생성됨
    • 매개변수 지정 가능
class 클래스명 {
    constructor([매개변수]) {
        // this.를 이용하여 객체의 프로퍼티 정의
    }
}

 

student.js

// student

class Student {
    constructor(name) {  // 생성자를 constructor() 함수로 정의
        this.name = name;
    }
}

var s1 = new Student("홍길동");
console.log(s1.name);

홍길동


 

프로토타입 메서드

  • class 블럭안에 정의되는 함수

  • function 키워드 없이 정의

class 클래스명 {
    constructor([매개변수]) {
        // this.를 이용하여 객체의 프로퍼티 정의
    }

    함수명([매개변수]) {     // 프로토타입 메서드
    }
}

자동으로 프로토타입 메서드가 된다.

 

student.js

//student2

class Student {
    constructor(name, age) {  // 생성자를 constructor() 함수로 정의
        this.name = name;
        this.age = age;
    }

    printProfile(){  // 자동으로 프로토타입 메서드로 넘어간다. (function X!!!)
        console.log(`이름 : ${this.name}, 나이 : ${this.age}`);
    }
}

var s1 = new Student("홍길동", 20);
s1.printProfile();

console.log("printProfile" in s1.__proto__)
console.log("printProfile" in Student.prototype)
// 둘다 prototype이 있다.

이름 : 홍길동, 나이 : 20

true

true




Getter/Setter 메서드

  • get, set 키워드로 설정
class 클래스명 {
    constructor([매개변수]) {
        // this.를 이용하여 객체의 프로퍼티 정의
    }

    함수명([매개변수]) {    // 프로토타입 메서드
    }

    get 프로퍼티명() {
    }
    set 프로퍼티명(매개변수) {
    }
}

 

//get,set

class Student {
    constructor(name, age) {
        this._name = name;
        this.age = age;
    }
    printProfile() {
        console.log(`이름 : ${this.name}, 나이 : ${this.age}`)
    }
    get name() {
        return this._name;
    }
    set name(name) {
        this._name = name;
    }
}

// 실제론 ._name이지만 사용할때는 필드 변수처럼 .name을 이용한다.

var s1 = new Student("홍길동", 20);

console.log(s1.name);
s1.name = '고길동'
console.log(s1.name);
console.log(s1);

홍길동

고길동

Student { _name: '고길동', age: 20 }


 

정적 메서드

  • static 키워드로 메서드 정의

  • 자체 인스턴스 (this) 없이 구현

    인스턴스와 무관한 메서드

class 클래스명 {
    :

    static 메서드명(매개변수) {
    }
}



상속

extends 키워드와 super 키워드 도입

기능 확장의 개념

class 자식클래스 extends 부모클래스 {
    constructor([매개변수]) {
        super([매개변수]); // 부모의 생성자 호출, 이 후에 this 생성
    }
}
  • 부모의 생성자는 반드시 호출

Inherit.js

//inherit

class Parent {
    constructor(name) {
        this.name = name;
    }

    print() {
        console.log("이름 : " + this.name);
    }
}


class Child extends Parent {
    constructor(name, age) {
        super(name);  // 오버라이드 시킨것
        this.age = age;
    }

    print() {
        super.print();  // 형식이 Python과 다르다.
        console.log("나이 : " + this.age);
    }

    static sayHello() {
        console.log('Hello~');
    }
}


class GrandChild extends Child {
    constructor(name, age, address) {
        super(name, age);
        this.address = address;
    }
    print() {
        super.print();
        console.log("주소 : " + this.address);
    }
}

var person = new GrandChild("홍길동", 20, "서울");
person.print();
GrandChild.sayHello();  // static 메서드 (인스턴스와 관계없다.)

/*

*/

// 

이름 : 홍길동
나이 : 20
주소 : 서울
Hello~


 

구조를 보기 위해서는 크롬 > F12 > Console 명령창을 이용해서 펼쳐보자.

'인터페이스 개발 > javascript' 카테고리의 다른 글

Javascript - 클래스  (0) 2020.09.21
Javascript - 객체  (0) 2020.09.21
Javascript - 함수  (0) 2020.09.21
Javascript - 배열  (0) 2020.09.21
Javascript - 예외처리  (0) 2020.09.21

댓글