-
오버로딩과 디폴트 매개변수C# 2022. 1. 24. 14:07
1. 오버로딩
오버로딩이란 함수를 정의할 때 같은 이름으로 쓸 수 있지만 다른기능을 수행하는 기능을 가지고 있다.
오버로딩으로 정의한 함수는 이름이 같아서 구분할 때는 매개변수로 구분한다.
using System; namespace CSharp { class Program { static void Add(int a, int b) { Console.WriteLine(a + b); } static void Add(int a, int b, int c) { Console.WriteLine(a + b + c); } static void Main(string[] args) { Add(1, 2); Add(1, 2, 3); } } }
첫 번째 Add함수는 매개변수가 2개이고
두 번째 Add함수는 매개변수가 3개이므로
사용할 때 매개변수를 달리해주면 C#에서 알아서 매개변수에 맞는 함수를 실행한다.
참고로 반환형식은 구분을 두지 않기 때문에 이름과 매개변수가 같고 반환형식이 다르다면 구문오류가 발생한다.
static void Add(int a, int b) // 구문오류 { Console.WriteLine(a + b); } static int Add(int a, int b) // 구문오류 { Console.WriteLine(a + b); return 0; }
그리고 오버로딩은 매개변수의 자료형(int, float...)으로 구분을 하기 때문에 매개변수의 이름이 다르다고 할지라도 구분이 되지않는다.
static void Add(int a, int b) // 구문오류 { Console.WriteLine(a + b); } static int Add(int c, int d) // int c와 int d로 이름을 바꿨지만 구문오류 { Console.WriteLine(a + b); return 0; }
2. 디폴트 매개변수
static void Add(int a, int b) { Console.WriteLine(a + b); } static void Add(int a, int b, int c) { Console.WriteLine(a + b + c); }
위의 두 개의 코드를 간결해보이기 위해 하나로 합치는 방법이 있는데 그럴 때는 디폴트 매개변수를 사용하면된다.
static void Add(int a, int b, int c = 0) { Console.WriteLine(a + b + c); }
int c = 0을 해줌으로써 만약 함수를 호출할 때 a와 b값만이 전달이 되면 c는 알아서 0으로 설정이 된다.
다만 주의해야 할 점은 디폴트 매개변수는 맨 오른쪽부터 채워넣어야 한다. 그 이유는 컴파일러에서 구분을 못하기 때문이다! 이런걸 모호함이라고 하는데 왼쪽부터 디폴트 매개변수가 채워진다면 C#입장에선 디폴트 매개변수를 쓰는지 안쓰는지 구분하기 모호하기 때문이다.
static void Main(string[] args) { Add(1, 2); Add(1, 2, 3); }
디폴트 매개변수를 사용하였기 때문에 위의 메인함수에 대해서는 1번의 내용과 똑같이 동작한다.
using System; namespace CSharp { class Program { static void Add(int a, int b = 1, int c = 0) { Console.WriteLine(a + b + c); } static void Main(string[] args) { Add(1, c: 2); } } }
만약에 디폴트 매개변수가 2개이상 있다면 특정한 디폴트 매개변수에만 값을 전달하고 싶을 때도 있다.
그럴 때에는 '특정한 매개변수명: 값' 형식으로 써줄 수 있다.
'C#' 카테고리의 다른 글
클래스 형변환 (0) 2022.01.24 c++ c#의 차이점 (0) 2022.01.24 out (0) 2022.01.24 메소드(함수)와 함수범위 (0) 2022.01.24 break, continue (0) 2022.01.22