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
이처럼 가변 개수의 인수를 사용하면 함수를 호출할 때마다 다른 개수의 인자를 전달할 수 있습니다.
메서드 오버로딩과 가변 개수의 인수는 함수를 더욱 유연하고 효율적으로 사용할 수 있도록 도와줍니다.