옛날 옛적에…
이제 C를 좀 안다 생각하고 C++ 로 배우기로 한 적이 있었다.
C에는 없는 C++에서 새롭게 소개되는 여러가지 개념들이 있었는데, 그 중 앞부분에 나오는 것이 참조라는 녀석이다. 주로 & 라는 기호가 같이 붙어 있고, 사용하는 대표적인 예제가 swap 함수를 포인터 없이 구현하는 것이었다.
void swap(int& x, int& y) {
int t = x;
x = y;
y = t;
}
C 에서도 아래처럼 & 연산자를 사용할 수는 있지만, 이는 주소를 얻는 연사자이지 참조 타입을 만드는 것은 아니다.
int x = 1;
int* y = &x;
저 예제만 보고, 뭐야 포인터 보다 간단하게 사용할 수 있어 편해졌네? 정도였고, 그 첫 경험의 영향으로 참조에 대한 개념이 한번도 제대로 머리에 들어오질 않게 된것 같다. 그러고도 20년 넘게 잘 살았는데, 아마도 밥먹고 살려고 사용한 언어들은 주로 VB, C#, JavaScript, Java, Kotin 같은 것들이었고, 간혹 이것들로 해결되지 않고 조금더 native 에 접근해야 하는 경우에는 (C++ 로 시도하다 결국은) C로 개발했던거 같다.