클래스 내부에 선언
메소드 선언 필수 요소 세가지
| 반환형식 | 메소드이름 | 매개변수목록| |—|—|—|
class 클래스이름
{
한정자 반환형식 메소드이름 (매개변수목록)
{
...
return 메소드결과;
}
}
결과를 반환할때 return 사용 : return을 쓰게 되면 메소드가 실행되기 전 위치로 실행 흐름이 이동하게 된다
class Calculator
{
public static int Plus( int a, int b)
{
Console.WriteLine("{0},{1}",a,b);
int result = a+b
return result
}
}
int x = Calculator.Plus(3,4);
static이 없었다면
Calculator calc = new Calculator(~ ); 이런식으로 인스턴스 객체를 만든다음에 써야한다
int x = calc.Plus(3,4);
메소드입장에서는 매개변수이지만 메소드를 호출한 입장에서는 인수(Arguments) 라고 부른다
[a, b 값이 달라지지만 x, y 값에 영향을 미치지 않는다]
public static void Swap(int a, int b)
{
int temp = b;
b = a;
a = temp;
}
static void Main(string[] args)
{
int x = 3;
int y = 4;
Swap(x,y);
}
[a, b 값이 달라지고 x, y 값에 영향을 미친다]
static void Swap(ref int a, ref int b)
{
int temp = b;
b = a;
a = temp;
}
static void Main(string[] args)
{
int x = 3;
int y = 4;
Swap(ref x,ref y);
}
[출력 전용 매개변수 VS 참조로 인수 전달하기]
ref 참조로 인수 전달하기는 인수 값이 수정되지 않아도 컴파일 에러를 출력하지 않음
out 출력 전용 매개변수를 사용하고 인수값이 수정되지않으면 컴파일러가 문제를 제기함
void Divide ( int a, int b, out int quotient , out int remainder)
{
quotient = a / b;
remainder = a % b;
}
int a = 20;
int b = 3;
int c;
int d;
Divide(a,b, out c, out d);
Console.WriteLine("{0},{1}",c,d);
[이걸 c#이 제공하는 이유]
int 끼리 더하는 PlusInt 메소드, double끼리 더하는 PlusDouble 가 있다면
그냥 더하는 기능은 같은데 매번 이름 짓기도 귀찮
메소드 사용하는 입장에서도 번거로움
로직이 동일하고 데이터 형식만 동일하다면 여러가지 이름을 짓느라 고생안해도 되고 이름 찾느라 고생안해도됨
int Plus(int a, int b)
{
return a+b;
}
double Plus(double a, double b)
{
return a+b;
}
int x = Plus(1,2);
double y = Plus(3.1,2.4);
int Sum(params int[] args)
{
int sum = 0;
for(int i=0;i<args.Length;i++)
{
sum += arg[i];
}
return sum;
}
int total =0;
total = Sum(1,2,3,4,5);
total = Sum(1,2,3);
void My(int a, int b){
console.WriteLine("{0},{1}",a,b)
}
static void Main(string[] args)
{
My(a : 3, b: 4);
}
void My(int a=0, int b =0){
console.WriteLine("{0},{1}",a,b)
}
my(3);