C# 메서드 오버로딩 마스터하기: 개념, 예제, 모범 사례
C# 메서드 오버로딩 완벽 가이드
C#에서 매개변수 개수, 타입, 순서를 변경하여 메서드를 오버로딩하는 방법을 명확한 예제와 함께 익혀보세요.
C#에서 한 클래스 내에 이름이 같지만 매개변수 목록이 다른 여러 메서드를 정의할 수 있습니다. 이를 메서드 오버로딩(Method Overloading)이라 합니다. 예를 들어:
void display() { ... }
void display(int a) { ... }
float display(double a) { ... }
float display(int a, float b) { ... }
위 예제에서 display() 메서드는 오버로딩되었습니다. 이 메서드들은 이름은 같지만 전달받는 인수가 다릅니다.
참고: 오버로딩은 오직 매개변수 목록(개수, 타입, 순서)에 의해 결정됩니다. 반환 타입은 오버로딩 조건에 영향을 주지 않습니다.
1. 매개변수 개수 변경으로 오버로딩
매개변수의 개수가 다르면 오버로딩이 가능합니다.
void display(int a) { ... }
void display(int a, int b) { ... }
예제
using System;
namespace MethodOverload {
class Program {
// 매개변수 1개
void display(int a) {
Console.WriteLine("Arguments: " + a);
}
// 매개변수 2개
void display(int a, int b) {
Console.WriteLine("Arguments: " + a + " and " + b);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.display(100);
p1.display(100, 200);
Console.ReadLine();
}
}
}
실행 결과
Arguments: 100
Arguments: 100 and 200
전달된 인수의 개수에 따라 적절한 오버로드가 호출됩니다.
p1.display(100) → 매개변수 1개 버전 호출
p1.display(100, 200) → 매개변수 2개 버전 호출
2. 매개변수 타입 변경으로 오버로딩
매개변수 개수가 같아도 타입이 다르면 오버로딩됩니다.
void display(int a) { ... }
void display(string b) { ... }
예제
using System;
namespace MethodOverload {
class Program {
// int 매개변수
void display(int a) {
Console.WriteLine("int type: " + a);
}
// string 매개변수
void display(string b) {
Console.WriteLine("string type: " + b);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.display(100);
p1.display("Programiz");
Console.ReadLine();
}
}
}
실행 결과
int type: 100
string type: Programiz
p1.display(100) → int 오버로드 호출
p1.display("Programiz") → string 오버로드 호출
3. 매개변수 순서 변경으로 오버로딩
매개변수의 타입과 개수가 동일하더라도 순서를 바꾸면 별도의 오버로드가 됩니다.
void display(int a, string b) { ... }
void display(string b, int a) { ... }
예제
using System;
namespace MethodOverload {
class Program {
// int, string 순서
void display(int a, string b) {
Console.WriteLine("int: " + a);
Console.WriteLine("string: " + b);
}
// string, int 순서
void display(string b, int a) {
Console.WriteLine("string: " + b);
Console.WriteLine("int: " + a);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.display(100, "Programming");
p1.display("Programiz", 400);
Console.ReadLine();
}
}
}
실행 결과
int: 100
string: Programming
string: Programiz
int: 400
p1.display(100, "Programming") → int, string 오버로드 호출
p1.display("Programiz", 400) → string, int 오버로드 호출