⭐ 추상 클래스
공통적으로 사용하는 틀(속성, 메서드 등)을 정의만 해두는 클래스
추상 클래스는 직접 인스턴스화할 수 없으며, 반드시 상속을 통해 실체 클래스를 만들어야 합니다.
● 모든 자식들이 반드시 오버라이딩해야 하는 프로토타입을 가지고 있습니다.
● 추상 클래스는 일반 필드, 메서드를 가질 수 있다. 일반 메서드에서 구현도 가능합니다.
● 추상 메서드는 선언만 가능하고 직접적인 구현은 자식 클래스에서 오버라이딩을 한 후 해야합니다.
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에서 필수로 구현해야 합니다.
'개발, IT > C#' 카테고리의 다른 글
| [유니티 / C#] 박싱(Boxing), 언박싱(Unboxing) (0) | 2025.09.19 |
|---|---|
| [유니티 / C#] 인터페이스 (Interface) (0) | 2025.09.19 |
| [유니티 / C#] 클래스의 상속(Inheritance) (0) | 2025.09.18 |
| [유니티 / C#] static (정적) 한정자 (0) | 2025.09.17 |
| [유니티 / C#] 메모리와 가비지 컬렉터 (0) | 2025.09.17 |