C# 7 : ref local
C# 7 에서는 로컬변수에 대해 ref 를 적용하여 동일한 메모리 공간에 대한 레퍼런스를 얻을 수 있는데,
이를 ref local 이라 부른다. 아래 예제에서, 로컬변수 a에 대해 ref 를 적용하여 변수 b에
a의 레퍼런스를 할당하였다. 다음 b 의 값을 2로 변경하였는데, a 나 b가 동일한 메모리를 가리키고 있으므로
a, b 값이 모두 2가 된다.
예제
int a = 1;
// ref local
ref int b = ref a;
b = 2;
WriteLine($"{a}, {b}"); // "2, 2" 출력
C# 7 : ref return
C# 7 이전 버젼에서는 메서드의 입력 파라미터에 대해서는 ref를 적용할 수 있었지만
리턴 타입에 대해서는 ref 를 적용할 수 없었다.
C# 7 에서는 이제 리턴 타입에 대해서도 ref 타입을 허용하게 되었다.
예를 들어, 아래 GameData 클래스의 GetScore() 메서드는 리턴 타입이 "ref int"로 되어 있고
실제 return 문에서도 "ref scores[id]" 처럼 ref 값을 리턴하고 있는데,
이것을 ref return 이라 부른다.
이러한 ref return 기능은 큰 용량의 데이타에서
특정 요소를 리턴하여 읽거나 변경할 때 유용하게 사용될 수 있다.
한가지 주의할 점은 ref return을 하는 메서드를 호출할 때는
아래 예제의 "ref _gameData.GetScore(10)" 에서와 같이
메서드 호출문 앞에 ref를 붙여야 한다.
예제
using static System.Console;
namespace ConsoleApp1
{
class Program
{
static GameData _gameData = new GameData();
static void Main(string[] args)
{
// 10번째 배열요소에 대한 ref
ref int score10 = ref _gameData.GetScore(10);
// 10번째 배열요소에 쓰기
score10 = 99;
WriteLine(_gameData.GetScore(10)); // 99
}
}
class GameData
{
private int[] scores = new int[100];
// ref return
public ref int GetScore(int id)
{
//...
return ref scores[id];
}
}
}
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.