• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

클래스 제너릭 상속시 super constructor 설정 안하는 이유

23.06.10 16:02 작성 23.06.10 23:25 수정 조회수 243

0

Generic in inheritance 강의에서 궁금한점이 있어서 질문 드립니다!

밑에 코드처럼 자식 클래스(Winter, Winter2)가 부모 클래스(Person)로 부터 상속을 받았는데

Winer와 Winter2 둘다 super constructor로 부모 속성을 설정 하지 않았는데

어떻게 정상적으로 인스턴스에서 부모속성을 가져오는지 궁금합니다~

 

class Person<T, Z>{
    name: T;
    age: Z;

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



// Winter 클래스 상속
class Winter extends Person<string, number>{

};

const winter = new Winter('김민정', 22);
console.log(winter); 



// Winter2 클래스 상속
class Winter2<T, Z> extends Person<T, Z>{

}

const winter2 = new Winter2('김민정', 22);
console.log(winter2);





 

보통의 경우 이렇게 해줘야 하지 않나요? 이렇게 해도 작동은 잘 되더라고요ㅎㅎ;;

constructor(name:string, age:number){
super(name, age)

}

 

 

그런데 또 이런 경우는 super constructor 하지 않으면 에러가 발생합니다 ㅎ;

class Winter3<T, Z, Part> extends Person<T, Z>{
    part?: Part;

    constructor(part?: Part) {
        
        this.part = part
    }
}

답변 1

답변을 작성해보세요.

1

안녕하세요!

자식 클래스에서 constructor를 선언했을때 super 키워드를 사용하지 않으면 왜 에러가 나는지에대한 질문이 맞을까요?

이 부분은 대부분의 언어에 공통적으로 적용되는 부분입니다. 상속을 받을때 부모 클래스의 생성자를 그대로 사용하면 문제가 없습니다.

하지만 생성자를 '변형'하려고하면 (참고로 JS/TS의 경우 super 키워드를 부르기만 하는 생성자를 선언하더라도 해당됩니다) super 생성자를 '무조건' 불러줘야합니다.

상속을 받는거기때문에 어떻게든 부모 클래스의 생성자를 충족시켜야 하기 때문이죠.

감사합니다!

자식 클래스에서 아예 생성자를 선언하지 않는 경우에는 부모의 생성자를 그대로 상속받기때문에 문제가 되지 않습니다!

5km님의 프로필

5km

질문자

2023.06.12

감사합니다~!!!

지금까지 잘 못 알고 있었네요... 자식클래스가 부모클래스로 부터 상속받으면 무조건 super constructor로 부모속성을 불러와야 하는줄 알았는데, 자식클래스에 새로운 속성을 추가할때만 super로 불러오는 거였네요

자식 클래스에 constructor를 정의하면 '무조건' super constructor를 불러줘야합니다. 만약에 constructor를 따로 정의하지 않는다면 자동으로 super constructor가 그대로 사용됩니다!