inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

349

5km

작성한 질문수 4

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
    }
}

typescript

답변 1

1

코드팩토리

안녕하세요!

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

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

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

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

감사합니다!

1

코드팩토리

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

0

5km

감사합니다~!!!

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

1

코드팩토리

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

ts강의 42. override 마지막즘 질문

0

43

1

25. js array의 문제점 4:55쯤 질문입니다

0

31

1

union 기본기 7분 53초 질문 드립니다.

0

117

2

Equality Narrowing 관련 질문

0

117

2

tsconfig.json 설명

0

124

2

환불 관련 질문 드립니다.

0

179

1

재너릭이랑 any 차이가 뭔가요?

0

221

2

리플렉션과 데코레이터 사용시 의문점

0

135

2

변수의 선언이 중복되었다고 할 때

0

163

2

type 으로 함수의 형식을 정의하고 함수를 정의할 때

0

144

1

declare 키워드가 가끔 나오던데 이건 뭔가요?

0

151

2

class가 값이 될 수 있다는 말을 이해하기 어렵습니다.

0

127

1

null값의 타입은 object 아닌가요?

0

188

1

타입? 인터페이스? 질문있습니다

0

147

1

type functionOnly = Extract<string| (()=> void), Function> 의 의미

0

171

2

npm install cache error

0

205

1

12_experimental_decorator, class decorator

0

131

1

9_class/7_override.ts, super 키워드 질문

0

211

2

강의 계획이 궁금합니다!

0

289

1

instantiator 질문

0

151

1

따라하는데 에러 생기네요

1

392

2

webstorm에서 ts-node 설치해도 문제가 발생하고 있습니다.

0

485

3

infer를 사용한 type의 쓰임새

0

131

1

혹시 수업하면서 작성된 코드는 따로 받아 볼 수 없나요?

0

203

1