메소드 오버로딩
- 하나의 메소드 이름에 여러 개의 구현을 올리는 것 (과적하다 = Overloading)
- 코드를 일관성 있게 유지가능
- 높은 생산성
- 매개변수의 개수와 형식이 다른 경우에 사용
int Plus(int a, int b)
{
return a + b;
}
double Plus(double a, double b)
{
return a + b;
}
.
.
.
int result1= Plus(1, 2); //int Plus(int,int)호출
double result2 = Plus(3.1, 2.4) // double Plus(double,double)호출
가변 개수의 인수(Params + 배열)
- 매개변수의 개수가 다를 때 사용
- 매개변수의 개수가 유한하게 정해져 있다면 가변 개수의 인수보단 메소드 오버로딩을 사용하는 것이 적절
- 가변 개수의 인수는 형식이 같으나 인수의 개수만 유연하게 달라질 수 있는 경우에 적합
오버로딩과 똑같이 같은 이름의 여러 개의 구현을 올리는건데, 이건 단순히 "개수"가 다를 때 사용한다.
class MainApp
{
static int Sum( params int[] args)
{
int sum = 0;
for(int i=0; i<args.length; i++)
{
sum += args[i];
}
Cosnole.WriteLine();
return sum;
}
static void Main(string[] args)
{
int sum = Sum(3,4,5,6,7,8,9,10);
//Sum(3,4,5) Sum(4,4,6,3)등 개수가 달라도 모두 가능
Console.WriteLine($"Sum : {sum}");
}
}
명명된 인수
명명된 인수는 메서드 호출 시 매개 변수의 이름을 명시적으로 지정하는 방식이다.
- 명명된 인수를 사용하면 매개 변수의 순서를 신경쓰지 않고 원하는 매개 변수에 값을 전달 할 수 있다.
- 또한 가장 쓸만하다 생각되는 부분은 인수가 너무 많을 때 어느 매개변수에 어느 인수를 할당하고 있는지 분간이 안되는 경우이다. 이 때 명명된 인수를 사용하면 도움이 될 듯 하다. (가독성 ++)
메소드를 호출 할 때 매개변수 목록 중 어느 매개변수에 데이터를 할당할지 지정하는 것은 '순서'이다. 예를 들면
void Method(int a, int b, int c)와 같이 선언된 메소드를 MyMethod(1,2,3)이라고 호출하면 a =1 , b= 2, c= 3으로 순서에 기반해 할당된다. 하지만 명명된 인수는 인수의 "이름"에 근거해서 데이터를 할당할 수 있다.
예제 코드
static void PrintProfile(string name, string phone)
{
Console.WrtieLine("Name:{0}, Phone:{1}", name, phone);
}
static void Main(string[] args)
{
PrintProfile(name : "김지훈", phone : "010-1234-5678");
}
+ 이외에도
void MyMethod(int a, int b= 0){ // } 처럼 초기화하고 싶은 매개변수를 선택하여 특정 값으로 초기화 하는 선택적 인수,
메소드 안에서 선언되고, 선언된 메소드 안에서만 사용되어 메소드 밖에서는 다시 쓸 일 없는 반복적인 작업을 하나의 이름 아래 묶어놓는 데 제격인 로컬함수에 대한 내용이 있다. 로컬 함수는 특히 람다식과 더불어 코드를 간추릴 수 있는 또 하나의 옵션이다.
자세한 것은 책 210pg참고
메소드 오버로딩
- 하나의 메소드 이름에 여러 개의 구현을 올리는 것 (과적하다 = Overloading)
- 코드를 일관성 있게 유지가능
- 높은 생산성
- 매개변수의 개수와 형식이 다른 경우에 사용
int Plus(int a, int b)
{
return a + b;
}
double Plus(double a, double b)
{
return a + b;
}
.
.
.
int result1= Plus(1, 2); //int Plus(int,int)호출
double result2 = Plus(3.1, 2.4) // double Plus(double,double)호출
가변 개수의 인수(Params + 배열)
- 매개변수의 개수가 다를 때 사용
- 매개변수의 개수가 유한하게 정해져 있다면 가변 개수의 인수보단 메소드 오버로딩을 사용하는 것이 적절
- 가변 개수의 인수는 형식이 같으나 인수의 개수만 유연하게 달라질 수 있는 경우에 적합
오버로딩과 똑같이 같은 이름의 여러 개의 구현을 올리는건데, 이건 단순히 "개수"가 다를 때 사용한다.
class MainApp
{
static int Sum( params int[] args)
{
int sum = 0;
for(int i=0; i<args.length; i++)
{
sum += args[i];
}
Cosnole.WriteLine();
return sum;
}
static void Main(string[] args)
{
int sum = Sum(3,4,5,6,7,8,9,10);
//Sum(3,4,5) Sum(4,4,6,3)등 개수가 달라도 모두 가능
Console.WriteLine($"Sum : {sum}");
}
}
명명된 인수
명명된 인수는 메서드 호출 시 매개 변수의 이름을 명시적으로 지정하는 방식이다.
- 명명된 인수를 사용하면 매개 변수의 순서를 신경쓰지 않고 원하는 매개 변수에 값을 전달 할 수 있다.
- 또한 가장 쓸만하다 생각되는 부분은 인수가 너무 많을 때 어느 매개변수에 어느 인수를 할당하고 있는지 분간이 안되는 경우이다. 이 때 명명된 인수를 사용하면 도움이 될 듯 하다. (가독성 ++)
메소드를 호출 할 때 매개변수 목록 중 어느 매개변수에 데이터를 할당할지 지정하는 것은 '순서'이다. 예를 들면
void Method(int a, int b, int c)와 같이 선언된 메소드를 MyMethod(1,2,3)이라고 호출하면 a =1 , b= 2, c= 3으로 순서에 기반해 할당된다. 하지만 명명된 인수는 인수의 "이름"에 근거해서 데이터를 할당할 수 있다.
예제 코드
static void PrintProfile(string name, string phone)
{
Console.WrtieLine("Name:{0}, Phone:{1}", name, phone);
}
static void Main(string[] args)
{
PrintProfile(name : "김지훈", phone : "010-1234-5678");
}
+ 이외에도
void MyMethod(int a, int b= 0){ // } 처럼 초기화하고 싶은 매개변수를 선택하여 특정 값으로 초기화 하는 선택적 인수,
메소드 안에서 선언되고, 선언된 메소드 안에서만 사용되어 메소드 밖에서는 다시 쓸 일 없는 반복적인 작업을 하나의 이름 아래 묶어놓는 데 제격인 로컬함수에 대한 내용이 있다. 로컬 함수는 특히 람다식과 더불어 코드를 간추릴 수 있는 또 하나의 옵션이다.
자세한 것은 책 210pg참고