메소드 오버로딩, 가변 개수의 인수

00·2024년 12월 11일

C#

목록 보기
10/149
using System; 

namespace Hello 
{
    class Mainapp
    {
        static int Plus(int a, int b)
        {
            Console.WriteLine("Calling int Plus(int,int)...");
            return a + b;
        }

        static int Plus(int a, int b, int c)
        {
            Console.WriteLine("Calling int Plus(int,int,int)...");
            return a + b + c;
        }

        static double Plus(double a, double b)
        {
            Console.WriteLine("Calling double Plus(double,double)...");
            return a + b;
        }

        static double Plus(int a, double b)
        {
            Console.WriteLine("Calling double Plus(int, double)...");
            return a + b;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(Plus(1, 2));
            Console.WriteLine(Plus(1, 2, 3));
            Console.WriteLine(Plus(1.0, 2.4));
            Console.WriteLine(Plus(1, 2.4));
        }
    }
}

// 하나의 메소드 이름에 여러 개의 구현을 올리는 것.
//오버로딩을 해 놓으면 컴파일러가 메소드 호출 코드에 사용되는 매개변수의 수와 형식을 분석해서
//어떤 버전이 호출될지를 찾아줌.

//실행할 메소드의 버전을 찾는 작업은 컴파일 타임에 이루어지므로 성능 저하 X.
//이름에 대한 고민을 줄여줌. 코드를 일관성 있게 유지해줌.

메서드 오버로딩과 가변 개수의 인수는 C#에서 함수를 더욱 유연하게 사용할 수 있도록 도와주는 강력한 기능입니다. 마치 요리 레시피에서 같은 재료를 사용하더라도 양념이나 조리법을 다르게 해서 다양한 요리를 만들 수 있는 것과 비슷합니다.

메서드 오버로딩

메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하면서, 매개변수의 개수나 타입을 다르게 하는 것입니다. 이렇게 하면 함수 이름을 똑같이 유지하면서도 다양한 상황에 맞게 함수를 사용할 수 있습니다. 마치 같은 이름의 요리라도 매운 맛, 순한 맛 등 다양한 맛을 선택할 수 있는 것과 같습니다.

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

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

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

이 코드에서는 Add라는 이름의 메서드를 세 개 정의했습니다. 각 메서드는 매개변수의 개수나 타입이 다르기 때문에, 컴파일러는 호출 시 전달되는 인자를 보고 어떤 메서드를 호출할지 결정합니다.  

가변 개수의 인수

가변 개수의 인수는 함수에 전달되는 인자의 개수가 고정되어 있지 않을 때 사용하는 기능입니다. params 키워드를 사용하여 가변 개수의 인수를 선언할 수 있습니다. 마치 뷔페에서 원하는 만큼 음식을 가져다 먹을 수 있는 것과 같습니다. 😉

class Calculator
{
    public int Sum(params int[] numbers)
    {
        int sum = 0;
        foreach (int number in numbers)
        {
            sum += number;
        }
        return sum;
    }
}

이 코드에서는 Sum 메서드에 params int[] numbers를 사용하여 가변 개수의 정수형 인자를 전달받을 수 있도록 했습니다.

Calculator calc = new Calculator();
int result1 = calc.Sum(1, 2, 3); // 6
int result2 = calc.Sum(1, 2, 3, 4, 5); // 15

이처럼 가변 개수의 인수를 사용하면 함수를 호출할 때마다 다른 개수의 인자를 전달할 수 있습니다.

메서드 오버로딩과 가변 개수의 인수는 함수를 더욱 유연하고 효율적으로 사용할 수 있도록 도와줍니다.

0개의 댓글