이것저것 공부기록
WEEK_7 과제 1 참조 본문
참조가 등장한 이유
C와 달리 C++에서 '참조'라는 개념이 왜 생겼는지 궁금해져서 그것부터 찾아보았다.
레퍼런스는 포인터를 잘못 사용해서 생기는 수많은 재앙과도 같은 문제들을 최소화하기 등장했다.
(https://gracefulprograming.tistory.com/11)
작성자분의 개인적인 견해일수도 있지만, 나중에 도움이 될 수도 있을 것 같아 첨부해놓는다.
(NULL 허용 여부가 프로그램 설계에 어떤 영향을 미치는지 등 아직 모르는 부분이 많다.)
포인터와 참조의 차이점
1. 참조자는 선언과 동시에 초기화해야 한다.
포인터는 선언 후 나중에 값을 할당해도 되지만, 참조자는 반드시 선언과 동시에 초기화해야 한다.
이는 NULL 값의 할당 가능 여부와도 관련이 있다.
널 포인터는 말 그대로 NULL이 들어있는 포인터이며, 아무것도 가리키지 않는 상태의 포인터이다.
포인터 사용 시 반드시 초기화를 해야되는 건 아니지만, 쓰레기 값을 가지고 있는 것이 나중에 문제가 되는 경우가 생길 수 있어 사용하고, 어떤 주소를 가리키고 있다가 더이상 가리키고 싶지 않을때도 사용할 수 있다.
반면, 참조자는 어떤 변수의 별명(또다른 이름)이기 때문에, 별명을 붙일 대상이 존재하지 않는다면 별명을 붙이는 행위 자체가 불가능하다. 따라서 NULL로 초기화할 수 없을 뿐더러, 초기화하지 않는 것도 불가능하다.
2. 포인터는 주소값을, 참조자는 변수를 담고 있다.
포인터는 &(ampersand)와 *(asterisk)를 사용한다. 위의 코드에서는 ptr이라는 포인터 변수에 num2의 주소값을 저장한다.
참조자는 포인터와 달리 그냥 변수명만 써서 초기화한다. 이는 변수의 '값' 혹은 '주소'를 담는 것이 아니기 때문이다. (라고 생각하기로 했다.)
'언어 > C++ 스터디' 카테고리의 다른 글
알고리즘 기수스터디 - 하노이 탑 (0) | 2020.07.22 |
---|---|
WEEK_3 과제 1 포인터 (0) | 2020.05.22 |
WEEK_2 과제2 별 찍기 시스템 (0) | 2020.05.17 |
WEEK_1 과제3 C++ 기초 (0) | 2020.04.12 |