[유니티 / C#] 추상(abstract) 클래스

⭐ 추상 클래스

공통적으로 사용하는 틀(속성, 메서드 등)을 정의만 해두는 클래스

추상 클래스는 직접 인스턴스화할 수 없으며, 반드시 상속을 통해 실체 클래스를 만들어야 합니다.

 

 

모든 자식들이 반드시 오버라이딩해야 하는 프로토타입을 가지고 있습니다.

추상 클래스는 일반 필드, 메서드를 가질 수 있다. 일반 메서드에서 구현도 가능합니다.

추상 메서드는 선언만 가능하고 직접적인 구현은 자식 클래스에서 오버라이딩을 한 후 해야합니다.

 

 

abstract 키워드

 

  abstract 키워드를 클래스 이름 앞에 붙이면 추상 클래스가 됩니다.

  abstract 키워드를 함수 앞에 붙이면 추상 메서드가 되며, 선언만 가능하게 됩니다. 구체적인 구현은 자식 클래스에서 오버라이딩을 통해 해야합니다.

public abstract class Game
{
    public abstract void Play();
}

 

 

💡 abstract와 virtual의 차이점

● abstract는 함수의 선언만 가능합니다. (함수의 바디를 가지지 않음)
    ○ 모든 자식클래스에서 필수로 오버라이딩 해야합니다.
    추상 클래스에서만 사용할 수 있습니다.

● virtual은 함수의 구현이 가능합니다. (함수의 바디를 가짐.)
    ○ 자식 클래스에서 오버라이딩하지 않아도 상관없습니다.
    ○ 추상/일반클래스에서 모두 사용 가능합니다.

 

 

추상 클래스 예제

public abstract class Monster
{
    public int level;

    public void Dash()
    {
        Console.WriteLine("대쉬!");
    }

    public abstract void Attack();
}

public class Slime : Monster
{
    public override void Attack()
    {
        Console.WriteLine("슬라임 공격!");
    }
}

public class Golem : Monster
{
    public override void Attack()
    {
        Console.WriteLine("골렘 공격!");
    }

}

 

추상 클래스는 일반 멤버 변수, 메서드도 가질 수 있습니다.

● Monster.cs 에서 선언한 추상 메서드를 자식 클래스인 Slime.cs, Golem.cs에서 필수로 구현해야 합니다.