티스토리 뷰
목차
C# ref, out - 두 한정자의 차이점
참조로 전달
Java와 C# 모두에서 개체를 참조하는 메서드 『매개 변수는 항상 참조로 전달』되는 반면 기본 데이터 형식 매개 변수(C#의 값 형식)는 값으로 전달됩니다.
C#에서 값 형식을 참조로 전달하려면 ref 또는 out 키워드 중 하나를 지정해야 합니다. 이 두 키워드 사이의 차이점은 매개 변수 초기화에 있습니다.
중요!
- ref 매개 변수는 사용하기 전에 초기화.
- out 매개 변수는 이를 전달하기 전에 명시적으로 초기화할 필요가 없고 이전의 값은 모두 무시.
닷넷 매개변수 사용법 차이
ref 키워드
호출되는 메서드에서 매개 변수로 사용되는 변수의 값을 영구적으로 변경하려면 값 형식 매개 변수에 이 키워드를 지정합니다. 호출에 사용되는 변수의 값을 전달하는 대신 이 키워드를 지정하면 변수에 대한 참조 자체가 전달됩니다.
그런 다음 참조에 대해 메서드가 실행되고 메서드를 실행하는 동안 매개 변수의 변경 내용이 메서드에 대한 매개 변수로 사용되는 원래 변수에 유지되도록 합니다.
다음 코드에서는 『Add 매개 변수』에 이 키워드가 사용되는 경우를 보여 줍니다.
여기서 두 번째 int 매개 변수는 ref 키워드와 함께 참조로 전달됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class TestRef { private static void Add(int i, ref int result) { result += i; return; } static void Main() { int total = 20; System.Console.WriteLine("Original value of 'total': {0}", total); Add(10, ref total); System.Console.WriteLine("Value after calling Add(): {0}", total); } } : Original value of 'total': 20 : Value after calling Add(): 30 | cs |
이는 호출하는 코드의 전체 변수에서 사용하는 실제 메모리 위치를 결과 매개 변수에서 참조하기 때문입니다. 클래스의 속성은 변수가 아니며 ref 매개 변수로 직접 사용할 수 없습니다.
닷넷 매개변수 사용법 차이
out 키워드
out 키워드는 ref 키워드와 매우 비슷한 효과를 가지며 out을 사용하여 선언된 매개 변수의 『수정 내용은 메서드 외부』에서도 볼 수 있습니다.
ref와 다른 두 가지 차이
- out 매개 변수의 모든 초기 값이 메서드 내에서 무시된다는 점.
- out 매개 변수는 메서드를 진행하는 동안 할당해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class TestOut{ private static void Add(int i, int j, out int result) { // The following line would cause a compile error: // System.Console.WriteLine("Initial value inside method: {0}", result); result = i + j; return; } static void Main() { int total = 20; System.Console.WriteLine("Original value of 'total': {0}", total); Add(33, 77, out total); System.Console.WriteLine("Value after calling Add(): {0}", total); } } : Original value of 'total': 20 : Value after calling Add(): 110 |
이 경우 Add 메서드에 대한 세 번째 매개 변수는 out 키워드를 사용하여 선언되며 메서드를 호출할 때에도 해당 매개 변수에 대한 out 키워드가 필요합니다.
[씨샵 out ref 한정자]
결론, 요약하자면,
- ref - 기존 변수를 메서드에서 수정하려 할 때 사용.
- out - 메서드 내에서 생성된 값을 반환할 때 사용.
out 키워드는 일반적으로 메서드에서 호출하는 코드에 대해 여러 개의 결과 값을 생성하는 경우 메서드의 반환 값과 함께 사용됩니다.
닷넷 매개변수 사용법 차이
반환값 이외에 내보낼 값도 out으로 처리할 수 있습니다.
MSDN에서 제공하는 기초
구체적인 차이는 아래 링크를 참조
C# ref, out - 두 한정자의 차이점