C#에서 lvalue와 rvalue의 개념
C#에서 표현식(expression)은 크게 lvalue와 rvalue 두 가지 유형으로 구분됩니다. 이 두 개념은 변수와 값이 메모리에서 어떻게 다뤄지는지 이해하는 데 중요한 기초가 됩니다.
lvalue (좌값)
lvalue는 할당문(대입문)의 왼쪽 또는 오른쪽 어느 쪽에도 위치할 수 있는 표현식을 의미합니다. 일반적으로 lvalue는 메모리상의 특정 위치를 참조하며, 따라서 값을 저장할 수 있는 대상이 됩니다.
rvalue (우값)
rvalue는 할당문의 오른쪽에만 위치할 수 있고 왼쪽에는 올 수 없는 표현식을 의미합니다. rvalue는 주로 계산 결과나 리터럴 값처럼 임시적인 값을 나타내며, 그 자체로는 메모리 위치를 갖지 않습니다.
변수와 리터럴의 차이
변수는 lvalue에 해당하기 때문에 할당문의 왼쪽에 위치할 수 있습니다. 반면 숫자 리터럴(numeric literal)은 rvalue에 해당하므로 값을 할당받을 수 없으며, 할당문의 왼쪽에 나타날 수 없습니다.
예를 들어, 다음은 유효한 C# 문장입니다.
int a = 100;
위 코드에서 변수 a는 lvalue이므로 할당문의 왼쪽에 놓일 수 있고, 숫자 리터럴 100은 rvalue이므로 오른쪽에 위치하여 변수에 저장되는 값이 됩니다.
반대로 아래와 같은 문장은 컴파일 오류를 발생시킵니다.
100 = a; // 오류: 왼쪽에는 lvalue가 와야 합니다.
정리
- lvalue: 할당문의 왼쪽과 오른쪽 모두에 올 수 있는 표현식 (예: 변수)
- rvalue: 할당문의 오른쪽에만 올 수 있는 표현식 (예: 숫자 리터럴, 계산 결과)