[c#] 다형성의 개념

정적 다형성 (Static Polymorphism)

정적 다형성은 오버로딩(Overloading)과 관련이 있습니다. 같은 함수명을 가지고 매개변수의 타입 또는 개수가 다른 여러 함수를 선언하는 것으로, 컴파일 시점에 어떤 함수를 호출할 지 결정됩니다.

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

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

동적 다형성 (Dynamic Polymorphism)

동적 다형성은 상속과 관련이 있습니다. 부모 클래스 타입의 변수에 여러 타입의 자식 클래스 객체를 대입함으로써, 실행 시간에 어떤 메서드를 호출할 지 결정됩니다.

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

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

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

다형성을 이용하면 각 객체를 일반화된 방식으로 처리하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 동시에 코드의 가독성을 향상시키고 유지 보수를 용이하게 합니다.

이러한 다형성은 객체 지향 프로그래밍의 핵심적인 장점 중 하나로, 코드 재사용성과 유연성을 높여줍니다.