본문 바로가기

game dev/C#

C# virtual 과 abstract 차이 + interface

 

C#에서 virtual과 abstract은 둘 다 다형성(polymorphism)을 지원하고, 클래스의 멤버를 재정의할 수 있는 특성을 가지고 있지만, 몇 가지 중요한 차이가 있습니다.

 

  1. 가용성(Availability):
    • virtual: 부모 클래스에서 구현되어 있지만 하위 클래스에서 재정의(override)할 수 있는 메서드를 선언할 때 사용됩니다.
    • abstract: 추상 클래스에서 선언되며, 하위 클래스에서 반드시 재정의해야 합니다.
  2. 구현(Implementation):
    • virtual: 부모 클래스에서 구현이 가능하며, 하위 클래스에서는 필요에 따라 재정의할 수 있습니다.
    • abstract: 추상 클래스에서 선언만 하고 구체적인 구현은 하위 클래스에서 이루어져야 합니다.
  3. 인스턴스 생성 가능 여부:
    • 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