[JS] super

Pakxe·2022년 11월 29일
1

JavaScript

목록 보기
9/16
post-thumbnail

개념

상위(부모) 객체의 함수를 호출 시 사용한다.

문법

자식 클래스의 생성자 내부에서 super(인수들) 로 호출해 사용한다. 생성자 내부에서 단 한번만 호출한다.
이 코드는 this 키워드 사용 전에 선행 호출되어야 한다. 그렇지 않으면 super가 먼저 호출되어야 한다는 오류가 뜬다.

왜 사용하나

일단 아래의 코드를 봐보자

sum2를 상속받은 sum3 클래스가 있다. 각 클래스명 뒤에 붙은 숫자 개수를 덧셈하는 클래스이다.

이때 만약 sum4를 만든다고 하면, 4개의 숫자를 더해야한다. 그러면 14줄부터 16줄의 코드가 한줄 더 추가될 것이다. 만약 sum5가 된다면 더 늘어날 것이고,, 매우 비효율적인 작업이 된다.

이때 사용하는게 super()다. 개념적으로는 부모 클래스의 생성자를 호출하는 것이다. 이 말이 직관적으로 다가오진 않으므로 왜 자식생성자에 super()가 있나를 생각해보면 불필요한 반복을 줄이기 위해서라고 생각하면된다.

위 코드에서 3-4, 14-15줄이 반복된다. 매우 비효율적이다.
우리는 자식클래스의 14-15를 지우고 super(a, b)로 부모의 생성자를 불러올 수 있다!
이건 super()가 곧 부모 생성자에 써있는 코드를 그대로 가져와서 붙여넣기 하는 것과 동일하다고 생각하면 된다.

바로 아래처럼 말이다.

super를 사용해 생성자 내부 코드 줄이기


이 코드와 이전 코드는 똑같이 작동하지만 한 줄 줄어들었다. 만약 sum2의 생성자 코드가 매우 길었다면 더 많은 이득을 봤을 것이다!

그런데 이 코드는 살짝 애매하다. 자식 클래스의 sum() 메서드는 이전과 마찬가지로 모두 하나하나 작성되어 있다. 이것도 줄일 수 있을까?

앞에서 한 것과 마찬가지로 부모 클래스에 있는 sum() 메서드를 호출하면 된다. 부모의 sum()은 a + b를 반환한다. 그럼 이 반환값 + c만 해주면 되는 것이다. 약간이지만 코드를 줄일 수 있으니 줄여보자.

super를 사용해 메서드 길이 줄이기


19 줄이 줄어들었다. 만약 긴 코드였다면 더 많이 줄어들었겠다.

profile
내가 꿈을 이루면 나는 또 누군가의 꿈이 된다.

0개의 댓글