JavaScript 객체 지향 프로그래밍

super

수업소개

서브(자식) 클래스에서 상위 클래스를 호출할 때 사용하는 super 키워드를 소개합니다. 

 

 

 

강의

 

 

 

코드

class.js (변경사항)

class Person{
    constructor(name, first, second){
        this.name = name;
        this.first = first;
        this.second = second;
    }
    sum(){
        return this.first+this.second;
    }
}
class PersonPlus extends Person{
    constructor(name, first, second, third){
        super(name, first, second);
        this.third = third;
    }
    sum(){
        return super.sum()+this.third;
    }
    avg(){
        return (this.first+this.second+this.third)/3;
    }
}

var kim = new PersonPlus('kim', 10, 20, 30);
console.log("kim.sum()", kim.sum());
console.log("kim.avg()", kim.avg());

 

댓글

댓글 본문
작성자
비밀번호
  1. jsm5272
    - super() 와 super. 의 용법은 각각 무엇인가?
    super()은 부모클래스의 constructor 즉, 생성자로서의 역할을 수행한다.
    super. 은 부모클래스 자체를 의미하며 super.<무엇>에서 <무엇>에는 부모클래스의
    키값이나 메서드가 올수 있다.

    - super가 없다면 어떤점이 불편한가? 있다면 어떤점이 편리한가?
    super가 없다면 class를 사용하는 의미가 없어지며, 부모클래스와 중복되는
    코드를 모두 다시 한번 작성해야하기 때문에 효율성이 떨어진다.
    그런데 이를 사용하게되면 부모가 가지고있는 기능들을 모두 가져다 쓸수 있어
    중복을 제거할 수 있고, 유지보수에 좋다.

    - 상속의 기능으로 인해 생기는 단점을 어떤게 보완하는가?
    상속받은 기능은 변경할수 없었는데 super를 통해 중복되는 부분은 끌어다 쓰고, 추가적인 부분은 추가하여 보완할 수 있다.
  2. -용법 super() 와 super. 의 각각 무엇인가?

    먼저 constructor(생성자)로 자식 클래스에서 사용할 값들을 정하고 난 뒤,
    부모로 부터 상속 받아올 값(부모클래스의 생성자를 호출)을 super()의 괄호 안에 넣을 때 사용하는 용법(그 뒤 자식에게 추가할 값을 추가하는 방식으로 활용한다.)
    super.은 부모를 뜻함. super.<어떤것> 은 부모가 가지고 있는 속성 중 <어떤 것>을 사용할 지 선택하기 위해 사용하는 용법

    -super가 없어서 어떤점이 불편한가? super가 있어서 어떤 편리함을 얻게 되는가?
    new객체 생성시 값을 추가하고 싶을 때(third), super가 없다면 부모의 모든 값을 추가해야하지만,
    super()를 이용해서, 부모가 가지고 있는 기능은 가져와서 실행하게 한다.

    -상속의 기능으로 인해 생기는 단점을 어떻게 보완하는가?
    관계의 복잡성은 생기지만 반복을 줄여, 코드의 재사용성을 높여 관계만 잘 파악한다면 유지보수가 용이하다.
  3. 감사합니다.
  4. 상속에서 super란 부모 클래스 값을 불러오는 수단으로 가로를 사용하여 코드를 적용할때는 부모 클래스를 생성자를 통하여 셋팅한 값을 또한 가로가 없을때는 변수및 메소드를 불러와서 값을 리턴해줍니다.
    이러한 super를 사용하는 이유에는 상속에서 부모 값 변수, 메소드 정보값에서 추가로 변경될때에는 구조가 다르기때문에 직접 작성을 해줘야하는데 이러면 부모에 있던 코드에서 추가되기 때문에 중복되는 코드가 많아집니다.
    이럴때 super를 사용하여 부모의 값을 가져와 변수,메소드,구조를 가져와 중복구조를 없앨 수 있습니다.
  5. 장건우
    가로가 있을때: 부모 클레스의 생성자를 호출
    가로가 없을때: 부모 클레스의 객체(변수,메써드) 호출
  6. super는 자식클래스에서 사용하며 상위클래스를 불러올때(일을 시킬때) 사용한다.
    super에 ( )을 같이 써주면 그건 상위클래스에 생성자 함수를 실행시키는 것이고
    나머지 추가된 코드만 자식클래스에서 수행한다.

    super.함수() 를 적게되면 상위클래스에 있는 함수가 리턴되서 값이 오고 추가적인 값을 자식클래스에서
    입력하면 됨
    super가 없으면 기존에 중복을 삭제시킬 수 있었던 상속의 개념이 무의미해진다.
    super가 있기 때문에 상속받은 코드를 수정할 때 코드의 중복을 방지할 수 있다.
  7. 변찬우
    질문1.
    1) super()는 부모 클래스의 생성자와 동일한 역할을 수행한다. 따라서 부모 클래스 생성자가 a,b라는 인자를 가지고 있다면 super(a,b)로 표현할 수 있다.
    2) super는 '부모 클래스 입장에서의 this'와 같다고 볼 수 있을 것 같다. 예컨데 this가 my라면, super는 his/her/their로 해석할 수 있지 않을까? 생각한다. 따라서 본 예제에서의 super.sum() 는 부모의sum()메소드, 다시말해 their sum() 정도로 해석할 수 있지 않을까 한다.

    질문2.
    부모의 속성을 물려 받긴 하겠는데 그대로 물려받아 사용하기는 애매하고, 그 속성의 일부를 수정해야 할 때 사용된다. 이런 경우 super를 사용하지 않으면, 부모의 속성과 10개 중 9개가 같고 1개만 다르더라도 10개 모두를 새로 생성해야 한다. 이를테면 아버지의 운전자 보험에 자식을 포함시키면 돈을 조금만 내면 되는데... 자식이 신규로 가입하면 많은 비용이 지출되는 것과 같다고 할까? ㅋㅋㅋ
    참고로 이 경우 extends를 할 수 없다. Must call super constructor in derived class 에러가 난다. extends하는 경우 부모의 생성자가 먼저 호출되기 때문인 것 같다. 다시말해 그냥 새로운 클래스를 선언하는 상황이 발생하는 것이다.
  8. 어쩌다보이
    슈퍼ㅁ..
  9. 부모 클래스에 있는 기능을 기반으로 또 따른 기능을 추가하고자 할때, super 키워드를 적극 이용한다!
  10. hyuna lee
    상속받은 자녀 class의 생성자에 property를 추가하고 싶을때 부모class에서 상속받은 부분을 super()로 써주고 추가하고 싶은 프로퍼티를 추가로 써주면 된다. 즉 super()는 부모class의 생성자의 프로퍼티를 말함. 또 부모class의 메소드를 super.메소드명()로 쓰고, 추가하고 싶은 메소드를 추가로 써주면 된다.
  11. 폭스킴
    부모 클래스를 기반으로 새로운 기능을 추가 구현한 자식 클래스를 상속받아 만들었을 때,
    super()를 통해 부모 클래스의 constructor를 호출하여 부모 클래스 초기 셋팅값을 사용할 수 있고,
    super.[메소드 이름] 을 통해 부모의 메소드를 호출하여 자식 클래스의 메소드와 콜라보를 할 수 있다.
    결국 기본적인 기능이 구현된 부모 클래스를 확장하여 사용자에게 필요한 기능을 추가한 자식 클래스를 사용하는데,
    코드의 중복없이 재사용성이 좋은 코드를 만들 수 있어 사용자의 편의를 증대시키고 유지보수가 편한 강려크한 기능!
    금수저 기능;;
graphittie 자세히 보기