Section 31.1: ref 키워드를 사용해 매개변수를 참조로 전달하기 (pass by reference)
MS 공식 문서 발췌:
C# 에서는, 매개변수를 값 또는 참조 방식으로 전달할 수 있다. 참조 방식으로 전달할 경우, 함수 멤버, 메소드, 속성값 (property), 인덱서, 연산자 (operator) 및 생성자에서 해당 값을 변경할 수 있으며, 이 변경사항은 호출을 수행한 환경에서도 유지되게 된다. 이러한 참조 방식으로 매개변수를 전달하고 싶다면, ref
혹은 out
키워드를 사용할 수 있다.
ref
와 out
의 차이점은, out
을 사용할 경우 해당 매개변수는 호출이 종료되기 전까지 새로운 값이 반드시 할당되어야 한다는 점이다. 대조적으로, ref
를 사용해 전달된 매개변수는 값이 변경될 수도, 변경되지 않을 수도 있다.
using System;
class Program {
static void Main(string[] args) {
int a = 20;
Console.WriteLine("Inside Main - Before Callee: a = {0}", a);
Callee(a);
Console.WriteLine("Inside Main - After Callee: a = {0}", a);
Console.WriteLine("Inside Main - Before CalleeRef: a = {0}", a);
CalleeRef(ref a);
Console.WriteLine("Inside Main - After CalleeRef: a = {0}", a);
Console.WriteLine("Inside Main - Before CalleeOut: a = {0}", a);
CalleeOut(out a);
Console.WriteLine("Inside Main - After CalleeOut: a = {0}", a);
Console.ReadLine();
}
static void Callee(int a) {
a = 5;
Console.WriteLine("Inside Callee a : {0}", a);
}
static void CalleeRef(ref int a) {
a = 6;
Console.WriteLine("Inside CalleeRef a : {0}", a);
}
static void CalleeOut(out int a) {
a = 7;
Console.WriteLine("Inside CalleeOut a : {0}", a);
}
}
출력 결과 :
Inside Main - Before Callee: a = 20
Inside Callee a : 5
Inside Main - After Callee: a = 20
Inside Main - Before CalleeRef: a = 20
Inside CalleeRef a : 6
Inside Main - After CalleeRef: a = 6
Inside Main - Before CalleeOut: a = 6
Inside CalleeOut a : 7
Inside Main - After CalleeOut: a = 7
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
31.3: ref 파라미터와 out 파라미터 비교 (0) | 2021.10.21 |
---|---|
31.2: 두개의 다른 변수에 할당된 값이 함께 변경되는 예제 (0) | 2021.10.20 |
30.2: IEnumerable<int> (0) | 2021.10.18 |
30.1: 사용자 구현 Enumerator 와 IEnumerable (0) | 2021.09.30 |
30: IEnumerable (0) | 2021.09.30 |