상속의 필요점과 뭘 할 수 있는지 알아보도록 하자.

애매한 메소드 추가

이전에 작성했던 class.js 파일을 다시 확인해 보자.

/** class.js */
class Person{
  constructor(name, first, second){ /** 약속된 이름으로 수정하면 안된다. */
  	this.name = name;
    this.first = first;
    this.second = second;
    console.log('constructor');
  }
  // method
  sum(){
  	return this.first + this.second; 
  }
  /** 여기에 새로운 기능 avg 메소드를 추가해보자*/
  avg(){
  	return (this.first + this.second) / 2;
  }
}

위 코드를 보면 class에 어떤 기능을 추가하고 싶지만
내가아닌 다른사람이 짠 코드라 수정할 수 없는경우 혹은 추가하고 싶은 기능이 거의 사용되지 않는 경우 전체 코드를 수정하는 것은 매우 부담스러울 것이다.

Person은 이전처럼 되돌려놓고 새로운 PersonPlus라는 class를 새로 정의해보자.

/** class.js*/
class Person{
  constructor(name, first, second){ /** 약속된 이름으로 수정하면 안된다. */
  	this.name = name;
    this.first = first;
    this.second = second;
    console.log('constructor');
  }
  // method
  sum(){
  	return this.first + this.second; 
  }
}
/** PersonPlus */
class PersonPlus{
  constructor(name, first, second){
    this.name = name;
    this.first = first;
    this.second = second;
    console.log('constructor-PersonPlus');
  }
  sum(){
    return this.first + this.second; 
  }
  avg(){
  	return (this.first + this.second) / 2;
  }
}
var kim = new PersonPlus('kim',10,20);
console.log('kim.sum() : ', kim.sum());
console.log('kim.avg() : ', kim.avg());

실행결과

constructor-PersonPlus
kim.sum() : 30
kim.avg() : 15

하지만 Person의 내용이 PersonPlus에 중복되어 있어서 효율적이지 않다.

중복을 제거하려면 어떻게 해야하는게 좋을까?

바로 상속을 활용하면 된다.

상속(inheritance)

PersonPlus가 Person을 상속하게 만들어보자.

/** class.js*/
class Person{
  constructor(name, first, second){ /** 약속된 이름으로 수정하면 안된다. */
  	this.name = name;
    this.first = first;
    this.second = second;
    console.log('constructor');
  }
  // method
  sum(){
  	return this.first + this.second; 
  }
}
/** PersonPlus */
class PersonPlus extends Person{
	avg(){
   		return (this.first + this.second) / 2;
    }
}

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

실행결과

constructor
kim.sum() : 30
kim.avg() : 15

이전 코드와 동일한 결과가 나오는걸 확인할 수 있다.
PersonPlus class는 avg 메소드를 제외한 모든 기능을 Person class에서 가져오고 있기 때문에
Person class를 수정하면 PersonPlus를 사용하는 객체 모두가 변경되게 된다.

상속을 이용해 기존 클래스를 확장하여 중복을 제거하고 코드의 양을 줄였으며
공유하는 코드를 수정하면 상속 받는 모든 객체들에 동시다발적으로 변화가 일어나도록해 유지 보수의 편리성을 높일 수 있다.

profile
해야되요

0개의 댓글