[c#] 다형성으로 구성된 애플리케이션 아키텍처

다형성(Polymorphism)

다형성은 하나의 인터페이스나 추상 클래스를 통해 여러 클래스를 이용할 수 있는 기능을 말합니다. 이를 통해 코드의 재사용성과 유지보수성이 개선됩니다. C#에서는 다형성을 구현하기 위해 인터페이스와 상속을 활용합니다.

인터페이스(Interfaces)

인터페이스를 사용하여 다형성을 구현할 수 있습니다. 인터페이스는 클래스가 구현해야 하는 메서드와 속성을 정의하여 일관된 동작을 보장합니다. 여러 클래스가 같은 인터페이스를 구현함으로써 각각의 클래스를 동일한 방식으로 다룰 수 있습니다.

public interface IShape
{
    double CalculateArea();
}

public class Circle : IShape
{
    public double Radius { get; set; }

    public double CalculateArea()
    {
        return Math.PI * Radius * Radius;
    }
}

public class Square : IShape
{
    public double SideLength { get; set; }

    public double CalculateArea()
    {
        return SideLength * SideLength;
    }
}

위 예제에서 CircleSquare 클래스는 IShape 인터페이스를 구현하여 CalculateArea 메서드를 제공합니다.

상속(Inheritance)

상속을 이용하여 다형성을 구현할 수도 있습니다. 부모 클래스에서 정의한 메서드를 자식 클래스에서 오버라이딩하여 다양한 동작을 제공할 수 있습니다.

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

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

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

위 예제에서 Animal 클래스를 상속받은 DogCat 클래스는 부모 클래스의 MakeSound 메서드를 오버라이딩하여 각각의 소리를 출력합니다.

다형성 활용

인터페이스나 상속을 통해 다형성을 구현하면, 클라이언트 코드에서 각 객체를 일관된 방식으로 다룰 수 있습니다. 이를 통해 확장성이 높은 애플리케이션을 구축할 수 있습니다.

var shapes = new List<IShape> { new Circle(), new Square() };

foreach (var shape in shapes)
{
    Console.WriteLine(shape.CalculateArea());
}

위 코드에서는 IShape 인터페이스를 구현한 CircleSquare 객체를 동일한 방식으로 다루고 있습니다.

결론

C#의 다형성을 활용하여 유연하고 확장 가능한 애플리케이션을 설계할 수 있습니다. 인터페이스와 상속을 적절히 활용하여 다형성을 구현하는 것이 중요합니다. 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.