상속(Inheritance)이란?
- 자바스크립트의 상속은 기존의 객체나 생성자 함수를 기반으로 새로운 객체나 생성자 함수를 생성하는 것을 말한다.
- 기존의 객체를 바탕으로 만들어지므로 상속을 통해 새로 만들어지는 객체에는 기존 객체의 특성을 모두 가지고 있다.
- 이를 기존의 객체에서 유산(속성과 메서드)을 물려받는 것과 비슷하다고 하여 상속이라는 말을 사용한다.
- 다시 말해, 상속을 사용하면 이전에 만들었던 객체와 비슷한 객체를 쉽게 생성할 수 있습니다.
class Origin{
constructor(value){
this.value = value;
}
method01(){
console.log("메소드01 호출했다!")
}
method02(){
console.log("메소드02 호출했다!")
}
}
// Origin을 상속받아서 새로운 클래스 하나 만들자!
// 이 안에는 Origin의 멤버변수와 멤버함수가 다 들어있다!
class FatOrigin extends Origin{
method03(){
console.log("메소드03 호출했다!")
}
}
const fo = new FatOrigin("값");
fo.method01();
fo.method02();
fo.method03();
/*
위 예에서 Origin은 상속을 해 주는 객체(설계도),
FatOrigin 은 상속을 받는 객체(설계도)이다.
이럴 때는 주로
Origin 을 부모클래스, 슈퍼클래스, 기초클래스, 상위클래스 라고 하고
FatOrigin 을 자식클래스, 서브클래스, 유도클래스, 하위클래스 라고 한다.
*/
빌트인 오브젝트 상속 : 내장 객체를 상속받아 기능을 확장할 수 있다.
super : 상속을 해준 부모클래스를 의미하는 키워드이다. super 키워드를 호출하여 부모클래스의 메소드를 호출할 수 있다.
메소드 오버라이딩 : 물려받은 메소드를 자식 클래스가 재정의할 수 있다.
ex)
// 내장 객체를 상속받아서 커스텀 클래스 만들기!
class ExtendArray extends Array{
// 서브클래스의 생성자 : 슈퍼클래스의 생성자를 호출해주어야 한다!
constructor(){
// super : 슈퍼클래스를 대신해 사용되는 키워드!
super();
}
// 이 배열에 들어 있는 각 요소의 총합을 반환!
getTotal(){
let total = 0;
for(let i =0; i < this.length; i++){
total += this[i];
}
return total;
}
}
/*
const arr = new ExtendArray() // 확장된 배열로 객체 생성하기!
arr.push(10);arr.push(20);arr.push(30);arr.push(40);
console.log(arr.getTotal())
*/
// 내가 만든 서브 클래스를 또 상속해서 또 서브클래스 만들기
class StrangeExtendArray extends ExtendArray{
constructor(){
super();
}
// 이미 getTotal은 상속받아 존재하는 상태이지만, 다시 짤래!
// => 메소드 오버라이딩(overriding) 또는 메소드 재정의
getTotal(){
let total = 0;
for(let i =0; i < this.length; i++){
total += (this[i] *5)
}
return total;
}
}
const exArr = new ExtendArray() // super
const stArr = new StrangeExtendArray() // sub
exArr.push(10);exArr.push(30);
stArr.push(10);stArr.push(30);
console.log(exArr.getTotal()) // 10 + 30 = 40
console.log(stArr.getTotal()) // 10*5 + 30+5 = 200
다형성(polymorphism)
- 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.(동적으로 자료형이 바뀌어짐)
- 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다. 자바스크립트에서는 해당 기능이 없지만 흉내낼 수 있다.
'Javascript' 카테고리의 다른 글
자바스크립트 기초(클래스) (0) | 2022.02.16 |
---|---|
자바스크립트 기초(객체) (0) | 2022.02.16 |
자바스크립트_로또 당첨 알고리즘 만들기 (0) | 2022.02.15 |
자바스크립트 기초(배열) (0) | 2022.02.11 |
자바스크립트 기초(함수) (0) | 2022.02.11 |