C++ 이야기 열여섯번째: 객체 자신을 가리키는 변수가 this 포인터인 이유는 ?

Posted at 2007. 7. 22. 14:57 // in S/W개발/C++ 이야기 // by 김윤수


[이글의 최신 Update 문서는 항상 여기에서 확인할 수 있습니다]

C++ 이야기 열여섯번째입니다. 이번 글에서는 특별한 팁을 알려드리기 보다는 C++ 역사의 한토막을 알려드릴까 합니다.

여러분은 C++ 를 배우고, 쓰면서 객체 자신을 가리키는 변수의 이름이 왜 this 일까 궁금해 본적 없으신가요 ? 왜 어떤 언어에서처럼 self 가 아닌지 또는 왜 레퍼런스가 아니라 포인터인지말입니다.

글쎄 이런 것에 대한 이유를 안다고 해서 실제 프로그래밍하는데 도움이 될 것 같진 않지만... 그래도 궁금한 건 어쩔 수 없습니다.

지난 주에 제가 잠시 미국에 가게 됐는데, 간 김에 그 동안 한국에서는 구하기 어려운 원서를 큰 맘 먹고 샀습니다. 이름하여 The Design and Evolution of C++ 입니다. 이 책을 쓴 사람은 C++ 언어 창시자인 Bjarne Stroustrup 이구요 C++ 언어가 탄생할 때부터 발전 과정을 상세히 설명해 주고 있기 때문에 현재 C++ 언어의 모습이 왜 이렇게 되어 있는지를 잘 이해할 수 있는 책입니다.

이번 글은 이 책을 읽으면서 발견한, 저자가 밝히고 있는 흥미로운 사실을 전해드리는 것입니다. ^^

우선 this 라고 명명한 이유는 저자가 C++ 언어(좀 더 정확히 말하면 C++ 의 전신인 C with Classes 언어)를 창시할 당시 Simula 로부터 큰 영향을 받았기 때문에 Simula 의 THIS 와 비슷하게 this 라고 이름을 지었기 때문이라고 합니다. 그리고 this 가 레퍼런스가 아니라 포인터인 이유는 C++ 의 전신인 C with Classes 시절에 이미 this 특징이 도입됐었는데, 그 때는 레퍼런스 개념이 지원되지 않았다고 하는군요.

결론적으로 말하자면 this 가 this 가 된 이유는 순전히 역사적인 이유 때문인 것이지요. :) 우리는 보통 모든 것에 대한 논리적인 이유를 찾으려고 노력하지만 세상 일이라는 게 모두 논리적이지만은 않은 것 같습니다. 어떤 경우 눈에 보이는 현상에 대한 논리적인 이유를 알 순 없어도 그냥 받아 들여야 하는 경우가 있지요. 어찌됐든 저자가 말하고 있는 설명을 기억하고 있으면 C++ 에서 객체 자신을 가리키는 변수는 this 라는 포인터라는 것을 잊어 버리진 않겠네요.

너무 시시한 글이라 실망하지 않으실까 걱정이긴 합니다만, 저에게는 재미있는 사실이라 한 번 전해드리고 싶었습니다. 앞으로도 계속 저의 C++ 이야기 와 고절가주팁에 관심 가져 주시기 바랍니다.