본문 바로가기

프로그램언어/C++

[C++] 참조자와 포인터 ( reference & pointer )

reference & pointer 모두 다른 객체를 간접적으로 참조 할 수 있습니다. 하지만 두 가지 방법을 구분하는 이유가 무엇일까? 라는데에서부터 시작할까 합니다.

참조자 개념부터 설명을 드리면 "NULL reference"란 것이 없다고 생각하시면 됩니다. 참조자는 어떤 경우든지 메모리 공간을 차지한 객체를 참조하고 있어야 합니다. 따라서 메모리에 접근하기 위해서는 변수를 통해 데이터를 조작하게 됩니다. 하지만 접근하는 변수가 없을 경우 포인터를 사용해야 합니다. 왜냐하면, 이런 경우에는 포인터의 값을 널(NULL)로 세팅할 수 있기 때문입니다.( 포인터을 잘못써서 데이터가 들어가야 될 자리에 널이 들어가면 서버가 죽는 경우를 허다하게 보았기 때문에 잘 사용하셔야 됩니다.) 객체를 참조하는 어떤 변수가 가리키는 메모리가 항상 유효한 객체이어야 한다면, 그 변수가 널일 가능성을 완전히 처음부터 베제한다면 참조자를 쓰시는 맞습니다.


정리를 하자면 참조자는 참조하고자 하는 어떤 객체를 미리 알고 있을 때,
다른 객체를 바꾸어 참조할 일이 결코 없을 때, 그리고 포인터를 사용하면
문법상 의미가 어색해지는 연산자를 구현 할 때 선택하면 됩니다.
이 세 가지의 경우를 제외하고는 무조건 포인터를 써야 합니다.