javaScript
js에서 메서드 오버라이드
mooyou
2024. 1. 15. 08:39
728x90
300x250
javaScript에서 오버라이드는 상속받은 부모 클래스 메서드를 드래도 사용하지 않을 경우 재정의 해서 사용하는 것을 말한다. 이를 통해 자식 크래스는 부모 클래스의 메서드를 그대로 사용하거나, 필요에 따라 변경하여 사용할 수 있다.
메서드 오버라이드를 하는 경우
1. 부모 클래스의 기능을 자식 클래스에서 재정의해서 사용하는 경우
2. 부모 클래스의 기능을 자식 클래스에서 확장할 경우
프로토타입 방식 예시
// 부모 객체의 생성자 함수
function Animal(name) {
this.name = name;
}
// 부모 객체의 메서드를 프로토타입에 추가
Animal.prototype.sound = function() {
return "음성을 내지 않습니다.";
};
// 자식 객체의 생성자 함수
function Dog(name) {
// 부모 객체의 생성자 호출
Animal.call(this, name);
}
// 프로토타입 체인을 통한 상속 설정
Dog.prototype = Object.create(Animal.prototype);
// 자식 객체에서 부모 객체의 메서드를 재정의
Dog.prototype.sound = function() {
return "멍멍!";
};
// 자식 객체만의 메서드 추가
Dog.prototype.wagTail = function() {
return "꼬리를 흔듭니다.";
};
// 자식 객체의 인스턴스 생성
const myDog = new Dog("멍멍이");
console.log(myDog.sound()); // 출력: 멍멍!
console.log(myDog.wagTail()); // 출력: 꼬리를 흔듭니다.
Dog 객체가 Animal 객체의 sound 메서드를 재정의 하여 변경했다. 이렇게 하면 myDog객체에서 sound메서드를 호추랗면 자식 객체에서 재정의된 버전이 실행된다.
이렇게 부모 객체의 메서드를 자식 객체에서 재정의함으로써 다형성이 구현되고 프로그램의 유연성이 향상된다.
클래스를 사용한 상속 메서드 오버라이드
// 부모 클래스 정의
class Animal {
constructor(name) {
this.name = name;
}
sound() {
return "음성을 내지 않습니다.";
}
}
// 자식 클래스 정의
class Dog extends Animal {
// 부모 클래스의 sound 메서드를 재정의
sound() {
return "멍멍!";
}
// 자식 클래스만의 메서드 추가
wagTail() {
return "꼬리를 흔듭니다.";
}
}
// 부모 클래스의 인스턴스 생성
const genericAnimal = new Animal("동물");
// 자식 클래스의 인스턴스 생성
const myDog = new Dog("멍멍이");
console.log(genericAnimal.sound()); // 출력: 음성을 내지 않습니다.
console.log(myDog.sound()); // 출력: 멍멍!
console.log(myDog.wagTail()); // 출력: 꼬리를 흔듭니다.
728x90
반응형