가상 함수 - 🐥 카카오 테크 캠퍼스
정의
가상 함수(Virtual Function)는 객체 지향 프로그래밍에서 상위 클래스의 메서드를 하위 클래스에서 Overriding(재정의)할 수 있는 메서드입니다.
다형성(Polymorphism)을 지원하기 위해 사용되며, 가상 함수를 사용하면 상위 클래스 타입의 참조 변수로 하위 클래스의 메서드를 호출할 수 있습니다.
가상 함수의 핵심은 동적 바인딩입니다. 동적 바인딩은 프로그램 실행 중에 실제 호출할 함수를 결정하는 프로세스를 말합니다.
핵심
- 다형성을 지원한다.
- 상위 클래스의 메서드를 하위 클래스에서 재정의할 수 있다.
- 상위 클래스 타입의 참조 변수로 하위 클래스의 메서드를 호출할 수 있다
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("The dog barks");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("The cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal;
myAnimal = new Dog();
myAnimal.makeSound(); // 출력: The dog barks
myAnimal = new Cat();
myAnimal.makeSound(); // 출력: The cat meows
}
}
원리
자바와 같은 객체 지향 프로그래밍 언어에서는 가상 함수 테이블(Virtual Function Table) 이라는 구조를 사용하여 가상 함수를 구현합니다.
가상 함수 테이블은 각 클래스마다 생성되며, 테이블에는 클래스의 가상 함수들의 주소가 저장됩니다.
객체의 메서드가 호출될 때, 가상 함수 테이블을 참조하여 해당 메서드의 주소를 찾아 실행합니다.
가상 함수 VS 그냥 함수 (Non-virtual Function)
가상 함수 (Virtual Function)
- 다형성 지원
- 가상 함수는 객체 지향 프로그래밍에서 다형성을 지원하기 위해 사용됩니다.
- 다형성을 통해 하위 클래스 객체를 상위 클래스 타입의 참조 변수로 다룰 수 있게 됩니다.
- 재정의 (오버라이딩)
- 가상 함수는 하위 클래스에서 상위 클래스의 함수를 재정의(오버라이딩)할 수 있습니다.
- 이를 통해 하위 클래스에서 상위 클래스의 함수를 변경하거나 확장할 수 있습니다.
- 가상 함수 테이블 사용
- 가상 함수는 가상 함수 테이블을 사용하여 메서드를 호출합니다.
- 가상 함수 테이블은 각 클래스마다 생성되며, 테이블에는 클래스의 가상 함수들의 주소가 저장됩니다.
그냥 함수 (Non-virtual Function)
-
다형성 미지원
- 그냥 함수는 다형성을 지원하지 않습니다.
- 상위 클래스 타입의 참조 변수로 하위 클래스의 그냥 함수를 호출하려고 하면, 상위 클래스의 함수가 실행됩니다.
-
재정의 불가
- 그냥 함수는 하위 클래스에서 재정의할 수 없습니다.
- 하위 클래스에서 같은 이름의 함수를 정의하더라도, 그것은 상위 클래스의 함수와 별개의 함수로 취급됩니다.
-
가상 함수 테이블 미사용
- 그냥 함수는 가상 함수 테이블을 사용하지 않고, 함수 이름에 대한 주소를 직접 참조하여 메서드를 호출합니다.
결론적으로, 가상 함수는 다형성과 상속에 관련된 동작을 지원하는 반면, 그냥 함수는 상속과 다형성에 영향을 받지 않는 일반적인 함수입니다.
가상 함수는 객체 지향 프로그래밍의 핵심 원칙 중 하나인 다형성을 구현하기 위해 사용되며, 그냥 함수는 일반적인 프로그래밍 작업에 사용됩니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Java' 카테고리의 다른 글
Template 메서드 패턴 (0) | 2023.04.27 |
---|---|
다운 캐스팅(DownCasting) (0) | 2023.04.27 |
Is-A와 HAS-A 또는 Inheritance와 Composition - 🐥 카카오 테크 캠퍼스 (0) | 2023.04.27 |
다형성(Polymorphism) (0) | 2023.04.27 |
Overriding(재정의) (0) | 2023.04.27 |