[c#] C# 오버로딩에 대한 흔히 하는 오해
오버로딩은 C#에서 자주 사용되는 개념 중 하나입니다. 이 기능을 사용하여 같은 이름의 메서드나 연산자를 파라미터의 개수나 타입에 따라 다르게 정의할 수 있습니다.
하지만 이 때문에 오버로딩에 관한 몇 가지 오해가 발생하기도 합니다. 여기서는 C#의 오버로딩에 대한 흔한 오해 몇 가지를 살펴보도록 하겠습니다.
1. 오버로딩은 메서드 시그니처에만 의존한다.
종종 사람들은 오버로딩이 메서드 시그니처만을 이용해 구별한다고 잘못 이해합니다. 하지만 C#은 메서드 이름과 시그니처를 함께 고려하여 오버로딩을 식별합니다. 메서드 이름이 같더라도 파라미터의 개수나 타입이 다르면 오버로딩으로 인식됩니다.
public void Print(int number)
{
Console.WriteLine(number);
}
public void Print(string text)
{
Console.WriteLine(text);
}
위의 예제에서 Print
메서드는 두 개의 오버로딩된 형태를 보여줍니다. 하나는 정수형을, 다른 하나는 문자열을 입력으로 받습니다.
2. 상속한 메서드를 오버로딩할 수는 없다.
또 다른 흔한 오해는 상속한 메서드를 오버로딩할 수 없다고 생각하는 것입니다. 이 문제는 부모 클래스의 메서드를 자식 클래스에서 하위로만 오버로딩할 수 있음을 잘못 이해하여 발생합니다.
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
위의 예제에서 Dog
클래스는 Animal
클래스의 MakeSound
메서드를 오버라이딩하고 있습니다. 오버로딩이 아닌 오버라이딩을 사용하고 있음에 주의하세요.
결론
위의 흔한 오해를 이해하고 있다면, C#에서의 오버로딩 개념을 더욱 잘 이해할 수 있을 것입니다. 올바른 사용법을 숙지하고, 다양한 상황에서 적절하게 활용할 수 있도록 노력해보세요.
참고 문헌: Microsoft Docs