객체지향 : 7. extend문법

Jian·2022년 9월 19일
0

JavaScript

목록 보기
4/27

Extend

의미

특정 클래스 속성을 다른 클래스가 이어받게 할 수 있다

문법

    class 할아버지 {
      constructor(fname, lname) {
        this.lname = fname
        this.fname = lname;
      }
    }

    // var 할아버지1 = new 할아버지('만덕') 

    class 아버지 extends 할아버지 {
      constructor(fname, lname) {
        super(fname, lname);
        this.age = 50;
      }
    }

주의할 점

이때 extend class에 꼭 super 써주어야 속성 사용 가능하다

호출 위치에 따른 super의 의미 차이

생성자 내부

상위 클래스의 생성자
위 코드에서는 할아버지 class의 constructor를 뜻함

생성자 외부

상위 클래스의 생성자의 속성
위 코드에서는 할아버지 class의 속성들을 뜻함

그러므로 아버지 class에서 super()를 사용하면
할아버지 class의 속성인 lname, fname이 상속됨

    class 할아버지 {
      constructor(fname, lname) {
        this.lname = fname
        this.fname = lname;
      }
      sayHi() {
        console.log('할아버지입니다')
      }
    }

    // var 할아버지1 = new 할아버지('만덕') 

    class 아버지 extends 할아버지 {
      constructor(fname, lname) {
        super(fname, lname);
        this.age = 50;
      }
      sayHi(){
        super.sayHi()
      }
    }

	아버지1.sayHi()
	// 결과 :  콘솔창에 '할아버지입니다' 출력
	// (아버지가 해당 메소드 가지고 있지 않으므로, 상위 class의 메소드를 사용
    ```
    
        class 아버지 extends 할아버지 {
      constructor(fname, lname) {
        super(fname, lname);
        this.age = 50;
      }
      sayHi(){
      console.log('아버지입니다')
        super.sayHi()
      }
    }

	아버지1.sayHi()
    // 결과 :  콘솔창에 '할아버지입니다' '할아버지입니다' 출력됨
	// 아버지가 해당 메소드 가지고 있으므로 그 메소드 실행되면서,
    // 동시에 상속받은 super.sayHi()메소드도 실행됨

c.f. Class 속성 지정 시 위치에 따른 차이

상위 Class의 생성자에 직접 부여된 속성들은
Extend Class가 사용하려면 super() 메소드와 함께 파라미터에 꼭 값을 명시해주어 야 하나,
상위 Class의 외부에 속성을 부여해준다면, 위 작업을 해주지 않더라도 Extend 클래스가 해당 속성 자유롭게 사용 가능하다.

profile
개발 블로그

0개의 댓글