더북(TheBook)

루프를 반복할 때마다 element는 배열 내의 다른 요소에 별칭을 붙이게 된다. 하지만 이 경우에는 문제가 되지 않는다. 반복할 때마다 실제로는 새로운 변수를 선언하는 꼴이기 때문이다.

참조 지역 변수를 초기화할 때 사용하는 변수는 당연히 값이 할당되어 있어야 한다. 변수의 할당 여부를 참조 지역 변수에도 공유하도록 할 수도 있었겠지만, 할당 규칙을 다소 완고히 정의하여 복잡성을 제거하는 것도 좋은 방법이다. 그리고 C# 언어 설계자들은 참조 지역 변수를 확실히 할당된 변수를 이용해서만 초기화할 수 있도록 제약했다. 예를 들면 다음과 같다.

int x;
ref int y = ref x;  ----- 유효하지 않음(x는 아직 할당되지 않음)
x = 10;
Console.WriteLine(y);

이 코드의 흐름을 살펴보면 실제로 값을 할당하기 전까지 변수로부터 값을 읽으려고 시도하지 않지만, 그럼에도 불구하고 유효하지 않은 코드다.

C# 7.3부터는 재할당에 대한 제약 사항을 다소 완화했다. 하지만 여전히 명확하게 할당된 변수를 이용하여 선언 시 초기화해야 한다. 예를 들면 다음과 같다.

int x = 10;
int y = 20;
ref int r = ref x;
r++;
r = ref y;  ----- C# 7.3에서는 유효
r++;
Console.WriteLine($"x={x}; y={y}");  ----- x=11, y=21을 출력
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.