연산자(Operator)는 뭔가 계산을 하기 위해서 사용되는 기호입니다. 모두가 잘 알고 있는 사칙연산인 더하기(+), 빼기(-), 곱하기(*), 나누기(/)가 그 예가 되겠습니다. (곱하기, 나누기 기호는 컴퓨터 프로그래밍에서는 수학에서 배운것과는 다른 기호인데, 키보드로 입력하기 쉬운 기호를 사용하는 것입니다.)
이 글에서 알아보게 될 할당 연산자는 위의 사칙연산과 같은 연산의 결과를 저장하기 위해 사용되는 연산자입니다. 할당 연산자를 대입 연산자라고도 부릅니다. 할당 연산자를 나타내는 기호는 하나의 등호(=)를 사용합니다. 수학에서는 같다는 의미인데, 컴퓨터 프로그램에서는 같다는 의미가 아니라 할당 연산자로 사용됩니다.
a = 2 + 3;
위 처럼 사용해서 2와 3을 더한 결과를 변수 a 에 저장(할당, 대입) 하게 됩니다. 할당 연산자(=) 오른쪽의 값이 왼쪽에 저장됩니다. 그러므로 할당 연산자의 왼쪽에는 뭔가를 저장할 수 있는 것이 와야 합니다. 컴퓨터 프로그래밍에서 저장은 메모리에 하게 되므로 특정 메모리 위치를 참조하는 것이 오는데 이러한 것을 lvalue 라고 합니다. 즉, lvalue가 할당 연산자의 좌측에 올 수 있습니다. 대부분 변수가 되는데 변수라고 콕 집어서 예기하지 않은 이유는 이것외에도 lvalue가 존재하기 때문입니다.
지금은 이정도로 간단히 알아두고 객체, 참조, 상수, 배열 등에 좀더 익숙해진 뒤에 lvalue에 대해 알아보면 좀더 복잡한 개념을 알 수 있을 것입니다.
int a = 2;
int b = 3;
a = a + b;
위와 같이 사용할수도 있습니다. a는 먼저 2로 초기화 되어 있고, b 는 3으로 초기화 되어 있습니다. a에 b를 더하고 그 결과를 다시 변수 a에 넣습니다. 최종적으로 변수 a 에는 5가 들어 있게 됩니다.
오래전 프로그램을 처음 공부할때 시작부터 이게 이해가 되지 않았던 기억이 나네요. 처음에는 산수랑 헤깔려서 할당이라는것을 잊어먹고, 자신에게 뭔가를 더했는데 어떻게 자신이 되지 라고 계속 생각했었습니다. 할당 개념을 이해하고나서도, 자신에게 뭔가를 더해서 그것을 자신에게 다시 할당한다는 것이 뭔가 부자연스러워 보여서 답답한 감이 계속 있었던 생각이 납니다.
나중에 컴퓨터에서 계산은 실제로 메모리 a, b 위치의 값을 CPU 내의 레지스터로 복사해서 계산을 하고 그 결과를 지정된 메모리에 적는 것이라는 것을 알게 되었습니다. 왠지 그후로는 답답함이 사라졌었던것 같습니다.
다시 할당연산자(=)로 돌아가서 할당 연산자 우측에 나온 a + b 는 lvalue가 아닙니다. a와 b를 더한 결과는 아직 특정 메모리에 차지하지 못하고 임시 영역에 있기 때문입니다. 이 값이 lvalue인 등호 좌측의 a 변수에 저장하게 되는 것입니다. 이러한 lvalue가 아닌 식의 값을 rvalue 라고 합니다. lvalue는 할당 연산자의 오른쪽, 왼쪽에 모두 올 수 있지만, rvalue는 오른쪽에만 올 수 있습니다.
lvalue와 rvalue의 개념은 C언어에서와 객체가 추가된 C++에서 그리고 rvalue 참조가 추가된 C++ 11 버전에서 처럼 시간이 지날수록 점점 복잡해지는것 같습니다. 점점 공부해 나가다보면 이해가 될것으로 생각됩니다.
할당 연산자의 우측에 나오는 것들은 값이되던 주소가 되던 전체를 평가한 결과가 어디에 넣을 수 있는 것이면 됩니다. 지금 상황에서 중요한 것은 lvalue 입니다. 할당 연산자 왼쪽에는 오는 것은 오른쪽에서 오는 값을 받을 수 있어야 합니다.
Visual Studio 에서는 lvalue를 잘못 사용하면 코드 작성 시점에 오류를 표시해 줍니다. 컴파일하기 전에 알 수 있다는 것입니다. 하지만 시행착오로 알아내는 것보다 원리를 알고 작성할 수 있다면 더 좋을 것입니다.
할당 연산자는 여러개를 한번에 사용할 수 도 있습니다.
a = b = c = 3;
이렇게 사용하면 a, b, c 모두가 3값을 가지게 됩니다. 실행은 항상 오른쪽에서 왼쪽으로 되어 집니다. c에 3을 할당하고, b에 c의 값을 할당하고, a에 b의 값을 할당하는 순입니다.
이것으로 할당연산자에 대해서 알아보았습니다.
'프로그래밍 > C++' 카테고리의 다른 글
Visual Studio Community 2017 제거하기 (0) | 2019.03.30 |
---|---|
C++ 문법 공부 - 데이터 타입(data type) (0) | 2018.04.09 |
C++ 문법 공부 - 콘솔 응용프로그램 기본 구조 (0) | 2018.04.08 |
Visual Studio Community 2017 설치하기 (0) | 2018.04.04 |
CentOS 7 에 C/C++ 개발용 Eclipse 설치하기 (0) | 2018.04.03 |