[c#] 다형성의 종류

C#에서는 다형성(polymorphism)을 통해 같은 이름을 가진 메서드나 속성이 다른 형태로 동작할 수 있습니다. 이는 유연하고 모듈화된 코드를 작성할 수 있도록 도와줍니다. C#에서는 다음과 같은 다형성의 종류가 있습니다.

1. 컴파일 타임 다형성 (Compile-Time Polymorphism)

컴파일 타임 다형성은 메소드 오버로딩(method overloading)연산자 오버로딩(operator overloading)을 포함합니다.

1.1 메소드 오버로딩 (Method Overloading)

메소드 오버로딩은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다. 메소드 시그니처가 다르면(매개변수의 개수, 자료형 등이 다르면) 같은 이름을 가지고 있더라도 각각 독립적으로 호출됩니다.

class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

1.2 연산자 오버로딩 (Operator Overloading)

연산자 오버로딩은 연산자를 클래스의 인스턴스에 대해 사용할 수 있도록 하는 기능입니다. 클래스 내에서 연산자의 기능을 재정의하여 사용자 정의 타입에 대한 연산을 가능케 합니다.

public static MyClass operator +(MyClass a, MyClass b)
{
    return new MyClass(a.Value + b.Value);
}

2. 런타임 다형성 (Run-Time Polymorphism)

런타임 다형성은 가상 메서드(virtual method)추상 클래스(abstract class)를 포함합니다.

2.1 가상 메서드 (Virtual Method)

가상 메서드는 파생 클래스에서 재정의(오버라이드)될 수 있는 메소드입니다. 부모 클래스에서 선언되지만 자식 클래스에서 구현될 수 있습니다.

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Some sound");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof");
    }
}

2.2 추상 클래스 (Abstract Class)

추상 클래스는 하나 이상의 추상 메서드를 포함하고 있는 클래스로, 추상 메서드는 구현이 없이 선언만 되어 있습니다. 파생 클래스에서 이를 상속받아 반드시 구현해주어야 합니다.

public abstract class Shape
{
    public abstract double CalculateArea();
}

이러한 여러 다형성의 종류를 활용하여 다양한 상황에 맞는 유연하고 모듈화된 코드를 작성할 수 있습니다.