추상(abstract) 클래스는 추상 메서드를 포함하는 클래스로, 해당 메서드의 실제 구현은 파생(자식) 클래스가 담당합니다. 추상 클래스는 공통적인 구조와 뼈대를 정의하는 역할을 하며, 이를 상속받는 파생 클래스들은 각자 더 구체화되고 특화된 기능을 구현하게 됩니다.
다음은 C#에서 추상 클래스를 사용하는 방법을 보여주는 예제입니다.
예제
using System;
namespace Demo {
abstract class Shape {
public abstract int area();
}
class Rectangle: Shape {
private int length;
private int width;
public Rectangle( int a = 0, int b = 0) {
length = a;
width = b;
Console.WriteLine("Length of Rectangle: "+length);
Console.WriteLine("Width of Rectangle: "+width);
}
public override int area () {
return (width * length);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle r = new Rectangle(14, 8);
double a = r.area();
Console.WriteLine("Area: {0}",a);
Console.ReadKey();
}
}
}실행 결과
Length of Rectangle: 14 Width of Rectangle: 8 Area: 112
위 예제에서 사용된 추상 클래스는 다음과 같습니다. Shape 클래스는 area()라는 추상 메서드만 선언하고 있으며, 실제 넓이 계산 로직은 이를 상속받은 Rectangle 클래스가 override 키워드를 통해 구현하고 있습니다.
abstract class Shape {
public abstract int area();
}추상 클래스의 핵심 규칙
추상 클래스를 사용할 때 반드시 알아야 할 규칙은 다음과 같습니다.
- 추상 클래스는 인스턴스를 직접 생성할 수 없습니다.
- 추상 메서드는 추상 클래스 외부에서 선언할 수 없습니다.
- sealed로 선언된 클래스는 상속이 불가능하므로, 추상 클래스를 sealed로 선언할 수 없습니다.