Class
포스트
취소

Class

클래스란?

  • 클래스
    • 각 객체들에 대해서 기본적인 형태를 같게 해주기 위해 선언한 기본틀
  • 인스턴스
    • 클래스를 통해 생성한 살아있는 객체

기본 사용법

//클래스 생성
class User{
    constructor(name="temp"){
        this.name = name;
    }
    sayHelloWorld(){
        console.log("Hello World !!!");
    }
    test
}

//인스턴스 생성
const basicUser = new User();
let dynamicUser = new User("what");

//콘솔에 출력
console.log(basicUser.name);  //출력 : temp, 만약 기본값이 없다면 undefined
console.log(dynamicUser.name);  //출력 : what

//항목 변경
dynamicUser.test = "test";
console.log(dynamicUser.test);  //출력 : test

//항목 추가
dynamicUser.example = "example";
console.log(dynamicUser.example);  //출력 : example, 클래스에 없는 항목이 추가된다.

클래스 특징

  • 클래스를 생성할 때, var나 function를 선언하지 않아도 된다.
  • 클래스를 생성할 때, object를 생성하는 것과 다르게 요소들 사이에 쉼표를 쓰지 않아도 된다.
  • 인스턴스 생성시 기본 값들을 설정해주는 생성자는 constructor 메소드를 통해서 사용한다.
  • 타 언어들과 다르게 생성자는 한 개만 쓸 수 있다.

상속(Extend)이란?

  • 자식 클래스가 부모 클래스의 요소(변수나 메소드)를 이어 받아서 사용할 수 있도록 하는 것
  • 부모가 되는 클래스 선언
    class Parent{
        constructor(name="who"){
            this.name = name;
        }
        parentTest(){
            console.log("This Function\'s Location is Parent");
        }
    }
    
  • 자식이 되는 클래스 선언 (부모 클래스인 Parent를 상속)
    class Child extends Parent{
        constructor(age=0){
            //super();  //name 출력시 who가 나온다.
            super(name="whos");
            this.age = age;
        }
        childTest(){
            console.log("This Function\'s Location is Child");
        }
    }
    
  • 상속 여부 확인
    const whatever = new Child();

    console.log(whatever.name);  //출력 : whos
    console.log(whatever.age);  //출력 : 25
    whatever.parentTest();  //출력 : This Function's Location is Parent
    whatever.childTest();  //출력 : This Function's Location is Child
    

상속 특징

  • 자식 클래스의 생성자에서는 super 메소드를 선언해서
    부모 클래스의 생성자가 죽지 않게 해줘야 한다.
  • 자식 클래스의 생성자에 있는 super를 인자를 주지 않고 사용하면
    부모 클래스가 기존에 갖고 있던 인자들을 모두 자동으로 사용할수 있게 된다.
  • 자식 클래스의 생성자에 있는 super에 부모 클래스의 생성자에서 사용하는 인자와
    같은 이름의 인자를 명시하면서 default value를 주면
    해당 자식 클래스로 인스턴스 생성시 기본 값이 바뀐다.

비구조화를 사용하는 클래스

  • 비구조화를 사용하는 클래스는 object를 인자로 전달한다.
class Test{
    constructor({name ="who", age = 20}){
        this.name = name;
        this.age = age;
    }
    printInto(){
        console.log(`name is ${this.name}, age is ${this.age}`);
    }
}

const t1 = new Test({});    //주의
const t2 = new Test({
    name : "example",
    age : 25
});

t1.printInto(); //출력 : name is who, age is 20
t2.printInto(); //출력 : name is example, age is 25

※ 비구조화로 클래스의 생성자를 선언했을 때 기본 값으로 초기화하기 위해
인자 값을 주지 않고 인스턴스를 생성하고 싶다면
인스턴스를 생성할 때 new 클래스명({})로 작성해서
인자를 object로 전달한다는 기본적인 표시를 해줘야된다.
그렇지 않으면 에러가 발생하게 된다.

이유

object를 받아서 그 안의 항목을 받아야 되는데 ({})가 아니라 ()로 초기화를 하게 되면
생성자에서 사용할 항목들을 찾을 수 없기 때문에 에러가 생긴다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.