c# 추상클래스, virtual과 abstract의 차이점

2024. 9. 27. 19:27카테고리 없음

개요

추상클래스에 대해 알아보겠습니다

내용 - 추상클래스( abstract )

- 추상클래스미완성된 클래스를 의미한다. 그뜻은 추상 메서드미완성된 메서드를 포함하고 있다는 뜻이다.

- 추상클래스를 사용하는 이유는 부모클래스에서 미완성된 메서드가 있는 경우 자식이 미완성된 메서드를 재정의 할 수 있습니다.(미완성된 메서드 = 구현이 이 되지 않은 메서드)

그래서 추상클래스는 구현된 메서드도 포함할 수 있고, 구현이 되지않은 메서드도 포함을 할 수가 있는 클래스이다.

- 구현한 메서드를 virtual 키워드 를 사용하여 자식 클래스에서 재정의( override ) 할 수도 있다.

- 추상 클래스 자체는 인스턴스화 할 수 없으며, 자식 클래스에서 반드시 재정의해야 합니다.

- 추상클래스 앞에 적는 키워드는 abstract를 사용합니다

- 클래스나 함수, 속성, 인덱서 앞에 제한자로 사용이 가능합니다.

- 단일 상속만 가능합니다. 즉, 한 클래스는 하나의 추상 클래스만 상속받을 수 있습니다.

추상클래스 예시

public abstract class Creature
{
    public abstract void Attack();  // 구현이 없음, 자식 클래스에서 재정의 필요
}

public class Monster : Creature
{
    // 반드시 Attack()을 재정의해야 함
    public override void Attack()
    {
        Console.WriteLine("Monster attacks fiercely!");
    }
}

virtual

  • 기본 구현을 제공하는 함수나 속성 등에 사용합니다.
  • 자식 클래스에서 **재정의(override)**할 수 있는 기능을 허용하지만, 반드시 재정의할 필요는 없습니다. 자식 클래스가 기본 구현을 그대로 사용할 수도 있습니다.
  • 클래스에서 사용이 불가능하다

virtual, abstract의 차이점

 

virtual : 기본 구현이 있고, 자식 클래스가 재정의할 수 있는 선택권을 가집니다. 하지만 재정의는 필수가 아닙니다.

abstract : 구현이 없으며, 자식 클래스에서 반드시 재정의해야 합니다.