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

C# abstract 키워드 완벽 가이드: 추상 클래스와 추상 메서드의 이해

C#에서 abstract 키워드는 추상 클래스(abstract class)를 정의할 때 사용됩니다. 추상 클래스는 구현부가 없는 추상 메서드(abstract method)와 일반적인 비추상 메서드(non-abstract method)를 함께 포함할 수 있으며, 직접 인스턴스화(instantiation)할 수 없다는 것이 가장 큰 특징입니다.

추상 클래스란 무엇인가?

추상 클래스는 객체 지향 프로그래밍에서 공통된 동작을 여러 파생 클래스가 물려받도록 설계하는 기반 클래스 역할을 합니다. 즉, 추상 클래스 자체로는 객체를 생성할 수 없고, 반드시 이를 상속받은 자식 클래스가 추상 메서드를 오버라이드(override)하여 구체적인 동작을 구현해야 합니다.

다음은 추상 클래스 Vehicle과 추상 메서드 display()를 선언한 예제입니다.

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

파생 클래스 구현하기

추상 클래스 Vehicle에는 Bus, Car, Motorcycle이라는 세 개의 파생 클래스가 존재합니다. 각 파생 클래스는 부모 클래스의 추상 메서드인 display()를 반드시 재정의해야 합니다.

그중 파생 클래스 Car의 구현 예는 다음과 같습니다.

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

override 키워드를 사용하여 부모 클래스의 추상 메서드를 재정의하며, 이때 각 클래스에 맞는 고유한 출력 내용을 작성합니다.

전체 예제 코드

아래는 C#에서 추상 클래스를 활용한 다형성(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();
    }
}

실행 결과

Bus
Car
Motorcycle

핵심 포인트 정리

  • abstract 키워드: 클래스나 메서드에 적용되어, 해당 멤버가 완전한 구현을 갖지 않음을 나타냅니다.
  • 인스턴스화 불가: 추상 클래스는 new 키워드로 직접 객체를 생성할 수 없습니다.
  • 강제 오버라이드: 추상 클래스를 상속하는 모든 파생 클래스는 추상 메서드를 반드시 구현해야 합니다.
  • 다형성 활용: 위 예제처럼 부모 클래스 타입의 변수(Vehicle v)로 다양한 자식 객체를 참조할 수 있어 유연하고 확장 가능한 코드를 작성할 수 있습니다.

이처럼 C#의 추상 클래스는 공통 인터페이스를 정의하면서 세부 구현은 파생 클래스에 맡기는 설계 방식으로, 코드의 재사용성과 유지보수성을 높이는 데 매우 유용합니다.