Constructor 에서 super(props) 해주는 이유?

RN에 국한된 이야기는 아니라고 생각됩니다만, 생성자에서 super(props)넘기는 건 왜 하는 걸까요? 만약에 그렇게 하지 않는다면 어떤 일이 생기는 걸까요?

1 Like

JAVA에서 하는것처럼 constructor가 있으면 parent의 props들을 가져올 때 필요한 것이라고 생각하면 될 것 같아요.

super();
this.hello = `undefined`

super(props);
this.hello = `hello`

요렇게 결과물이 나올 수 있어요. parent가 hello 프롭스를 가지고 있으면요.

참고: https://stackoverflow.com/questions/30571875/whats-the-difference-between-super-and-superprops-in-react-when-using-e

2 Likes

답변 감사합니다. 그런데 아직 혼동스러운게 있어요.

코드의 흐름만으로 보면, 현재 props를 부모에게 넘기는 (말씀해주신 것과 반대 방향) 인 것처럼 보이는데요. super() 메소드가 C++에서는 base class 의 생성자를 가리키잖아요. 왠지 부모의 props는 이미 상속을 통해서 전달되어 있는 것 아닌가요?

알려주신 링크에서 답변으로 채택된 글을 읽어보면, this.props를 사용할 수 있도록 하기 위해서 super(props)를 쓴다고 말하네요. :slight_smile:

넹. 답변을 보면 constructor 안에서 this.props를 써주려면 저렇게 해야 한다고 하는데 저도 엄청 deep하게는 모르겠네요. LINK 보시면 스택오버플로우와 같은 답변을 볼 수 있어요. Constructor에서 this를 써주기 위함… static method는 필요없구요.

1 Like

리액트 Component constructor가 별일을 하는 건 아니구요, (참고)

ECMA-262 스펙 상 constructor에서 super 호출 전에 this를 사용하지 못하게 되있습니다.

NodeJS에서 테스트해보면 ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor라는 error를 던지고 죽는 걸 확인할 수 있습니다.

단순하게 “자바스크립트 언어 스펙이다” 라고 이해하시면 될 듯 싶습니다.

3 Likes