C#에서는 메서드에 인수를 전달하는 방법으로 크게 세 가지 방식이 있습니다. 각각의 방법은 서로 다른 방식으로 인수를 전달하며, 각각의 상황에 맞게 사용됩니다. 이번 포스팅에서는 인수를 전달하는 세 가지 방식에 대해서 정리했습니다.
값에 의한 전달(Pass by Value)
값에 의한 전달은 메서드에서 전달된 인수의 값이 복사되어 처리되는 방식입니다. 이 방식으로 전달된 인수는 메서드에서 변경되어도 호출한 쪽에는 영향을 주지 않습니다.
static void Increase(int num)
{
num = num + 1;
}
static void Main(string[] args)
{
int number = 5;
Increase(number);
Console.WriteLine(number); // 출력 결과: 5
}
위 예제에서 Increase() 메서드에 number 변수를 전달하면 num 매개변수에 값이 복사됩니다. 메서드에서 num 변수를 증가시켜도 number 변수의 값은 변경되지 않아서 출력 결과는 5가 됩니다.
참조에 의한 전달(Pass by Reference)
참조에 의한 전달은 메서드에서 전달된 인수의 참조(메모리 주소)를 직접 전달하는 방식입니다. 이 방식으로 전달된 인수는 메서드에서 변경되면 호출한 쪽에도 영향을 줍니다.
static void Increase(ref int num)
{
num = num + 1;
}
static void Main(string[] args)
{
int number = 5;
Increase(ref number);
Console.WriteLine(number); // 출력 결과: 6
}
위 예제에서 Increase() 메서드에 number 변수를 참조로 전달하면 num 매개변수에 number 변수의 참조가 저장됩니다. 메서드에서 num 변수를 증가시키면 number 변수의 값도 같이 변경되어 출력 결과는 6이 됩니다.
출력에 의한 전달(Pass by Output)
출력에 의한 전달은 메서드에서 전달된 인수를 변경하고, 그 변경된 값을 반환하는 방식입니다. 이 방식은 메서드 내에서 두 개 이상의 값을 반환해야 할 때 유용합니다.
static void Increase(int num, out int result)
{
result = num + 1;
}
static void Main(string[] args)
{
int number = 5;
int result;
Increase(number, out result);
Console.WriteLine(result); // 출력 결과: 6
}
위의 예제에서 Increase() 메서드에 number 변수와 result 변수를 전달합니다. result 변수는 출력 매개변수로 선언되어 있으므로, 메서드에서 값이 변경되고, 반환됩니다. Increase() 메서드에서 result매개변수에 'num+1' 값을 대입하면, result 변수는 메서드를 호출한 쪽에서 사용할 수 있게 됩니다. 출력 결과는 6이 됩니다.
세 가지 방법은 각각의 상황에 따라 사용됩니다. 값에 의한 전달 방식은 메서드에서 전달된 값에 대한 복사본을 만들어서 처리하기 때문에 메모리 사용량이 크게 증가할 수 있습니다. 참조에 의한 전달 방식은 메서드에서 전달된 변수를 직접 참조하기 때문에 값의 복사가 필요 없어 메모리 사용량이 적습니다. 출력에 의한 전달 방식은 반환값 하나로는 부족한 경우, 여러 개의 값을 반환해야 할 때 유용합니다.
'Program Language > C#' 카테고리의 다른 글
Part2. C# 기초 다지기(14. params 키워드) (22) | 2023.03.11 |
---|---|
Part2. C# 기초 다지기(13. 속성) (16) | 2023.03.05 |
Part2. C# 기초다지기(11. 메서드 오버로딩) (16) | 2023.02.28 |
Part2. C# 기초 다지기(10. 클래스의 구성) (11) | 2023.02.24 |
Part2. C# 기초 다지기(9. 클래스와 구조체) (21) | 2023.02.23 |
댓글