[c#] 다형성과 객체의 동적 생성

C#에서 다형성(polymorphism)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 여러 클래스들이 동일한 인터페이스나 기반 클래스를 공유하여 다양한 동작을 할 수 있게 합니다.

다형성 (Polymorphism)

정적 다형성 (Static Polymorphism)

정적 다형성은 메서드 오버로딩(overloading)과 연결됩니다. 메서드 오버로딩은 동일한 이름을 가진 메서드가 서로 다른 매개변수의 개수나 형식을 가질 수 있게 하는 개념입니다. 이로 인해 동일한 이름의 메서드를 호출할 때 매개변수의 형식에 따라 적절한 메서드가 선택되어 실행됩니다.

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

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

동적 다형성 (Dynamic Polymorphism)

동적 다형성은 가상 메서드(virtual method)와 메서드 오버라이딩(overriding)을 사용하여 구현됩니다. 가상 메서드는 파생 클래스에서 재정의(override)될 수 있는 메서드이며, 이를 통해 동일한 인터페이스를 가진 다른 클래스의 객체가 실행 시에 동일한 메서드 호출로 다른 동작을 할 수 있습니다.

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle");
    }
}

객체의 동적 생성 (Dynamic Object Creation)

C#에서는 Activator 클래스를 사용하여 실행 시에 동적으로 객체를 생성할 수 있습니다. Activator.CreateInstance 메서드를 사용하면 타입의 인스턴스를 동적으로 생성할 수 있습니다.

class Program
{
    static void Main()
    {
        string typeName = "MyNamespace.MyClass";
        Type myType = Type.GetType(typeName);
        
        if(myType != null)
        {
            object myObject = Activator.CreateInstance(myType);
        }
    }
}

다형성과 객체의 동적 생성은 프로그램의 유연성과 확장성을 높여주며, 객체 지향 프로그래밍에서 강력한 도구로 활용됩니다.


참고 문헌: