메소드는 객체지향 프로그래밍 언어에서 사용하는 용어로, C와 C++에서의 함수와 동일하다.

함수와 동일하게 반환형에 대해서 지정하고 메소드의 내용에 대해서 정의한 다음, 호출하여 매개변수를 보내주면 결과를 반환한다.
class Example{
public int Sum(int _a, int _b){
return _a+_b;
}
//int형을 반환하는 Sum 메소드를 정의
// 매개변수 _a와 _b를 더한 값을 반환한다.
public static void Main(String[] _args){
int a = 5;
int b = 3;
Console.WriteLine($"Sum = {Sum(a, b)}");
//보간법으로 Sum함수를 호출하면서 결과를 바로 출력
//매개변수로 a와 b를 넘겨줌.
}
}
메소드에서 매개변수를 받아들일 때는 데이터의 복사가 이루어진다. 그래서 실제로 값의 변화를 주고 메소드가 종료되었을 때, 값을 출력해보면 변화가 없다.
public void change(int _a, int _b){
int temp = _a;
_a = _b;
_b = temp; // 매개변수의 값들을 교환
Console.WriteLine($"a = {_a} \n b = {_b}");
}
public static void Main(string[] _args){
int a = 5;
int b = 4;
change(a,b);
Console.WriteLine($"a = {a}\n b={b}"); // 값 변화 X
}
만약 메소드 외부의 값에 변화를 줘야할때는 ref를 선언하여 매개변수로 받은 변수를 참조한다고 선언해야 외부 값에 대한 접근이 가능하다.
public void change(ref int _a, ref int _b){
int temp = _a;
_a = _b;
_b = temp;
Console.WriteLine($"a = {_a}\n b = {_b}");
}
public static void Main(string[] _args){
int a = 5;
int b = 4;
change(a,b);
Console.WriteLine($"a = {a}\n b={b}");// 값이 변화
}
C#에서는 메소드 오버로딩이라는 개념이 존재한다.
하나의 메소드 이름을 가진 여러 개의 메소드를 구현하여 사용자가 호출할 때 사용하는 매개변수에 따라 알맞은 메소드로 사용되는 것을 의미한다. 컴파일 시점에 어떤 메소드에 작업이 이루어지는지 확인하므로 성능 저하의 문제는 없다.
public void print(){
Console.WriteLine("Hello, World!!"):
}
public void print(int _a){
Console.WriteLine($"Hello, {_a}");
}
public void print(int _a, int _b){
Console.WriteLine($"Hello,{_a}! Hello,{_b}!");
}
public static void Main(string[] _args){
print(); // Hello, World! 출력
print(1); // Hello, 1 출력
print(2,3); // Hello, 2! Hello, 3!출력
}
메소드 오버로딩을 통해 메소드 이름에 대한 고민을 줄여주며, 코드를 일관성 있게 유지해준다.