Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 추상 클래스(Abstract Class) 완벽 정리: 개념부터 실전 예제까지

C# 추상 클래스란?

C#에서 추상 클래스(abstract class)는 추상 메서드와 일반(비추상) 메서드를 모두 포함할 수 있는 클래스입니다. 클래스를 선언할 때 abstract 키워드를 붙이면 해당 클래스는 추상 클래스가 되며, 직접 인스턴스를 생성할 수 없다는 점이 핵심 특징입니다.

즉, 추상 클래스는 그 자체로 객체를 만들 수 없으며, 반드시 이를 상속받은 파생 클래스가 내부의 추상 메서드를 구현해야만 사용할 수 있습니다. 아래 예제에서는 Vehicle이라는 추상 클래스와 추상 메서드 display()를 정의하고 있습니다.

public abstract class Vehicle {
    public abstract void display();
}

추상 클래스를 상속받는 파생 클래스

Vehicle 추상 클래스에는 Bus(버스), Car(자동차), Motorcycle(오토바이)이라는 세 개의 파생 클래스가 존재합니다. 각 파생 클래스는 부모의 추상 메서드 display()override 키워드로 반드시 재정의해야 합니다.

다음은 파생 클래스 중 하나인 Bus 클래스의 구현 예입니다.

public class Bus : Vehicle {
    public override void display() {
        Console.WriteLine("Bus");
    }
}

C# 추상 클래스 전체 예제

이제 추상 클래스를 활용한 전체 코드를 살펴보겠습니다. 부모 타입인 Vehicle 변수 하나에 서로 다른 자식 클래스의 인스턴스를 차례대로 할당하면서, 객체 지향 프로그래밍의 핵심 개념인 다형성(polymorphism)이 어떻게 동작하는지 확인할 수 있습니다.

using System;

public abstract class Vehicle {
    public abstract void display();
}

public class Bus : Vehicle {
    public override void display() {
        Console.WriteLine("Bus");
    }
}

public class Car : Vehicle {
    public override void display() {
        Console.WriteLine("Car");
    }
}

public class Motorcycle : Vehicle {
    public override void display() {
        Console.WriteLine("Motorcycle");
    }
}

public class MyClass {
    public static void Main() {
        Vehicle v;
        v = new Bus();
        v.display();
        v = new Car();
        v.display();
        v = new Motorcycle();
        v.display();
    }
}

실행 결과

위 코드를 실행하면 변수 v에 어떤 파생 클래스의 인스턴스가 할당되었는지에 따라 각각 다른 출력 결과가 나타납니다.

Bus
Car
Motorcycle

핵심 정리

  • 추상 클래스는 new 키워드로 인스턴스화할 수 없습니다.
  • 추상 메서드는 본문(body)이 없으며, 파생 클래스에서 반드시 override로 재정의해야 합니다.
  • 추상 클래스는 추상 메서드 외에 일반 메서드와 필드도 함께 포함할 수 있어 공통 기능의 재사용에 유용합니다.
  • 부모 타입 변수로 자식 객체를 참조함으로써 다형성을 손쉽게 구현할 수 있습니다.