class, prototype, constructor에 익숙한 분들을 위한 심화 내용입니다. ES6의 extends와 super를 사용하여 기존 클래스를 상속하고 확장하는 방법을 알아봅니다.
// 부모(할아버지) 클래스 정의
class 할아버지 {
constructor(name) {
this.성 = 'Kim';
this.이름 = name;
}
}
// 할아버지 클래스를 상속받아 아버지 클래스 생성
class 아버지 extends 할아버지 {}
// new 연산자를 통해 인스턴스 생성
const a = new 아버지('만수');
console.log(a); // { 성: 'Kim', 이름: '만수' }
extends를 사용하여 할아버지의 모든 속성과 메소드를 아버지 클래스에 복사합니다.super()를 먼저 호출해야 합니다.super()는 부모 클래스의 constructor를 실행하는 함수로, 부모가 가진 속성(예: 성, 이름)을 초기화합니다.class 할아버지 {
constructor(name) {
this.성 = 'Kim';
this.이름 = name;
}
}
class 아버지 extends 할아버지 {
constructor(name) {
super(name); // 부모의 constructor를 호출하여 '성'과 '이름'을 상속받음
this.나이 = 50; // 아버지만의 추가 속성
}
}
const a = new 아버지('만수');
console.log(a); // { 성: 'Kim', 이름: '만수', 나이: 50 }
super(name)을 통해 할아버지 클래스의 constructor가 실행되어, this.성과 this.이름이 설정됩니다.this.나이에 추가 값을 할당합니다.sayHi() 메소드는 아버지 클래스 인스턴스에서도 호출할 수 있습니다.class 할아버지 {
constructor(name) {
this.성 = 'Kim';
this.이름 = name;
}
sayHi() {
console.log('안녕 나는 할아버지');
}
}
class 아버지 extends 할아버지 {
constructor(name) {
super(name);
this.나이 = 50;
}
}
const a = new 아버지('만수');
a.sayHi(); // 출력: 안녕 나는 할아버지
super를 메소드 내에서 사용합니다.class 할아버지 {
constructor(name) {
this.성 = 'Kim';
this.이름 = name;
}
sayHi() {
console.log('안녕 나는 할아버지');
}
}
class 아버지 extends 할아버지 {
constructor(name) {
super(name);
this.나이 = 50;
}
sayHi2() {
console.log('안녕 나는 아버지');
super.sayHi(); // 부모의 sayHi() 호출
}
}
const a = new 아버지('만수');
a.sayHi2();
// 출력:
// 안녕 나는 아버지
// 안녕 나는 할아버지
sayHi2() 메소드에서 먼저 아버지의 인사 메시지를 출력한 후, super.sayHi()로 할아버지의 sayHi()를 호출합니다.class 부모 {
constructor() {
this.name = 'Kim';
}
}
const 자식 = new 부모();
constructor 내부에서 메소드 직접 추가하기
class 부모 {
constructor() {
this.name = 'Kim';
this.sayHi = function() {
console.log('hello');
}
}
}
클래스 내부에서 메소드 정의하기 (prototype에 추가됨)
class 부모 {
constructor() {
this.name = 'Kim';
}
sayHi() {
console.log('hello');
}
}
Object.getPrototypeOf(객체)를 통해 해당 객체가 상속받은 부모의 prototype을 확인할 수 있습니다.class 부모 {
constructor(이름, 나이) {
this.name = 이름;
this.age = 나이;
}
}
const 자식 = new 부모('Park', 30);
console.log(자식); // { name: 'Park', age: 30 }
class 부모 {
constructor(이름, 나이) {
this.name = 이름;
this.age = 나이;
}
sayHi() {
console.log('안녕');
}
sayHello() {
console.log('안녕하세요');
}
}
const 자식 = new 부모('Park', 30);
자식.sayHi(); // 출력: 안녕
자식.sayHello(); // 출력: 안녕하세요