[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