CS 공부

[C#] Virtual, Abstract, Interface

때류기 2024. 7. 9. 01:12

객체 지향 프로그래밍을 할 때 'virtual', 'abstract', 'interface'는 알고있어야 하는 개념입니다. 각각의 키워드는 클래스와 메서드의 동작 방식을 제어하고, 코드의 유연성과 재사용성을 높이는데 사용됩니다. 이 글에서는 세 가지 키워드의 차이점과 특징을 서술해보겠습니다.

 

 

 

 


설명

 

Virtual

  • 정의: 'virtual' 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언에 사용되어, 파생 클래스에서 이를 재정의할 수 있게 합니다.

  • 특징:
    • 기본 구현을 제공할 수 있습니다.
    • 파생 클래스에서 'override' 키워드를 사용하여 재정의할 수 있습니다.
    • 선택적으로 재정의할 수 있습니다.
    • 기본 클래스에서 공통 동작을 정의하고, 파생 클래스에서 필요에 따라 동작을 변경할 때 사용합니다.

  • 코드 예시:
public class Payment
{
    public virtual void ProcessPayment()
    {
        Console.WriteLine("Payment");
    }
}

public class CreditCardPayment : Payment
{
    public override void ProcessPayment()
    {
        Console.WriteLine("CreditCardPayment");
    }
}

 

 

Abstract

  • 정의: 'abstract' 키워드는 클래스 또는 멤버 선언에 사용되며, 반드시 파생 클래스에서 구현되어야 합니다.

  • 특징:
    • 추상 클래스는 인스턴스화할 수 없습니다.
    • 추상 메서드는 구현을 제공하지 않습니다.
    • 추상 메서드는 파생 클래스에서 반드시 재정의해야 합니다.
    • 공통된 인터페이스를 정의하되, 구체적인 구현은 파생 클래스에 맡기고자 할 때 사용합니다.

  • 코드 예시:
public abstract class Shape
{
    public abstract double GetArea();

    public void DisplayArea()
    {
        Console.WriteLine("Area: " + GetArea());
    }
}

public class Circle : Shape
{
    private double _radius;

    public Circle(double radius)
    {
        _radius = radius;
    }

    public override double GetArea()
    {
        return Math.PI * _radius * _radius;
    }
}

 

 

Interface

  • 정의: 'interface'는 클래스 또는 구조체에서 구현해야 하는 메서드, 속성, 이벤트 및 인덱서의 정의를 포함합니다.

  • 특징:
    • 구현을 제공하지 않습니다.
    • 다중 상속을 지원합니다.
    • 모든 멤버는 기본적으로 'public' 입니다.
    • 클래스 간의 계약을 정의하고, 다중 상속을 통해 다양한 클래스에서 동일한 동작을 구현하고자 할 때 사용합니다.

  • 코드 예시:
public interface IDrivable
{
    void Drive();
}

public interface IFlyable
{
    void Fly();
}

public class FlyingCar : IDrivable, IFlyable
{
    public void Drive()
    {
        Console.WriteLine("Driving on the road");
    }

    public void Fly()
    {
        Console.WriteLine("Flying in the sky");
    }
}

 

 

 

 


정리

Virtual: 기본 동작을 제공하면서, 필요시 파생 클래스에서 이를 재정의할 수 있도록 합니다.

Abstract: 공통된 행동 방식을 정의하지만, 구체적인 구현은 파생 클래스에 맡깁니다.

Interface: 구현을 강제하는 계약을 정의하며, 다중 상속을 통해 다양한 클래스에서 동일한 동작을 구현할 수 있습니다.

 

 

 

 


지금까지 'virtual', 'abstract', 'interface' 에 대해 알아보았습니다.

현재 글의 내용 중 틀린 부분이나, 지적하실 내용이 있으시다면 언제든지 알려주세요! 읽어주셔서 감사합니다.

'CS 공부' 카테고리의 다른 글

[C#] 메모리 구조  (0) 2024.07.22
[C#] 가비지 컬렉터 (Garbage Collector, GC)  (0) 2024.07.15
[C#] 박싱과 언박싱 (Boxing & Unboxing)  (0) 2024.07.02
[C#] 해시셋 (HashSet)  (0) 2024.06.28
[C#] 링크드 리스트 (Linked List)  (0) 2024.06.23