C# 프로그래밍 기초 실습 전자책
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];
        }
    }
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.





Comment 의견/코멘트 쓰기
이메일
 *정확한 이메일이 아닐 경우 삭제될 수 있습니다
의견/코멘트
좌측의 3자리 문자들을 입력해 주십시오





아티클 모바일 링크
C# 스터디 소셜미디어
쉽게 배우는 파이썬 기초