C#에서 virtual과 abstract은 둘 다 다형성(polymorphism)을 지원하고, 클래스의 멤버를 재정의할 수 있는 특성을 가지고 있지만, 몇 가지 중요한 차이가 있습니다.
- 가용성(Availability):
- virtual: 부모 클래스에서 구현되어 있지만 하위 클래스에서 재정의(override)할 수 있는 메서드를 선언할 때 사용됩니다.
- abstract: 추상 클래스에서 선언되며, 하위 클래스에서 반드시 재정의해야 합니다.
- 구현(Implementation):
- virtual: 부모 클래스에서 구현이 가능하며, 하위 클래스에서는 필요에 따라 재정의할 수 있습니다.
- abstract: 추상 클래스에서 선언만 하고 구체적인 구현은 하위 클래스에서 이루어져야 합니다.
- 인스턴스 생성 가능 여부:
- virtual: 일반적인 메서드와 마찬가지로 객체를 직접 생성할 수 있습니다.
- abstract: 추상 클래스이므로 직접 객체를 생성할 수 없으며, 이를 상속받은 구체적인 클래스를 통해 객체를 생성해야 합니다.
// virtual 사용 예시
public class Parent
{
public virtual void Display()
{
Console.WriteLine("Parent class");
}
}
public class Child : Parent
{
public override void Display()
{
Console.WriteLine("Child class");
}
}
// abstract 사용 예시
public abstract class AbstractParent
{
public abstract void Display();
}
public class ConcreteChild : AbstractParent
{
public override void Display()
{
Console.WriteLine("Concrete child class");
}
}
이러한 차이점을 고려하여, virtual은 선택적으로 재정의 가능한 메서드를 만들 때 사용되고, abstract은 하위 클래스에서 반드시 재정의해야 하는 추상 메서드를 만들 때 사용됩니다.
+ 참고
interface와의 차이는 ?
interface는 가장 높은 추상성을 제공한다.
interface는 abstract와 비슷하지만 abstract가 상속관계에 가깝다면 interface는 상속의 개념보단 기능을 확장하는 개념이다. 또한 abstract와 달리 다중 상속이 가능하다.
'game dev > C#' 카테고리의 다른 글
인터페이스, 추상 클래스, virtual (0) | 2024.06.12 |
---|---|
상속과 다형성 (0) | 2024.06.12 |
BFS를 이용한 미로 최단거리 길찾기 구현 (0) | 2024.01.09 |
Nullable (0) | 2024.01.03 |
Reflection(리플렉션) (0) | 2024.01.03 |