인프런 커뮤니티 질문&답변

5km님의 프로필 이미지
5km

작성한 질문수

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

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

해결된 질문

작성

·

299

·

수정됨

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
질문자

감사합니다~!!!

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

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

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

5km님의 프로필 이미지
5km

작성한 질문수

질문하기