[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();
}
이러한 여러 다형성의 종류를 활용하여 다양한 상황에 맞는 유연하고 모듈화된 코드를 작성할 수 있습니다.