[컴][프로그래밍][C/C++] reference 는 투명 포장 봉투 : pointer 와 reference 의 차이

reference 와 pointer 의 차이 / 참조자와 포인터의 차이 / 포인터와 레퍼런스의 차이

pointer 와 reference 의 차이에 대한 글들은 많다. 개인적으로는 ref.1 , ref. 2 의 내용이 마음에 들었다. 근데 차이점들을 자꾸 설명해 주는데 그것이 머리 속에 잘 그려지지 않는다.

그래서 기억하고 이해하기 쉽게 비유를 조금 해봤다.

  • 상품 봉투 pointer : 포인터는 봉투 자체가 상품이다. 그래서 이 녀석은 자신의 일련번호가 등록되어 있다.
  • 일반 투명 봉투 reference : 그런데 reference 는 무엇인가를 담으려 기다리는 투명 포장 봉투이다. 대상을 담아야만 의미를 가진다. 그리고 대부분 한 번 쓰고 버리는 것이라서 한 번 봉인하면 열 수 없다. 빵집 같은 곳에서 쿠키나 빵을 담고 있는 투명 봉지를 상상하면 될 것이다.

이제 이 녀석들을 아래 차이점에 대입해 보자. 이것은 어디까지나 비유로 인한 설명이니까 모든 경우에 정확히 맞아 떨어지지 않을 수 있음을 고려하자.(^^;;;) 하지만, 이해를 돕는 역할은 충분히 할 수 있을 듯 하다.

 

  1. 재할당(re-assigned) 불가 : pointer 는 좋은 상품 봉투라서 여러 번 열고 닫을 수 있다. 그래서 한 번 썼다가, 다른 대상을 또 넣을 수 있다. 하지만 reference 는 한 번 담고 나서 그 안에 대상을 없애고, 다른 제품을 담을 수 없다.
  2. &ref 는 "ref 가 있는 memory 의 주소"가 아니라 ref 가 가리키는 "변수가 있는 memory 의 주소" : pointer 는 상품으로서의 봉투라서 봉투자체에 자신의 일련번호(바코드) 가 찍혀있다. 그래서 어디에 있는지 알 수 있다. 하지만 referene 는 그냥 상품을 포장하기 위한 녀석이다. 그래서 reference 자체가 중요하지 않기 때문에 이 녀석에 대한 일련번호는 존재하지 않는다. 그냥 이 봉투가 담고 있는 상품의 일련번호를 가지고 있을 뿐이다.
  3. reference 의 reference 는 불가능 : pointer 는 상품 봉투라서 이 상품 봉투 자체를 판매하기 위해 상품 봉투를 다른 상품 봉투에 넣어서 팔기도 한다. 하지만 투명 봉투는 팔 일이 없다. 팔아도 안 사가니까, 그래서 봉투 안에 봉투를 넣는 일 따위는 불가능하다.
  4. NULL 을 가질 수 없다. : pointer 는 상품 봉투라서 그 안에 무엇이 들어있지 않아도, 그 pointer 를 상품으로 진열해서 팔기도 한다. 하지만 reference 는 그 안에 상품이 들어있지 않으면 진열할 수도 없다. 그 투명 봉투 안에 꼭 상품을 넣어야만 진열을 할 수 있다. 그러므로 만약 진열된 상태에서 상품의 포장만 남기고 상품을 파는 일은 없어야 한다.
  5. offset 연산 불가능(포인터 예제 :  int *p; p++; ) : pointer 는 상품 봉투라서 일련번호를 가지고 있다. 그래서 이 일련번호 다음에 어떤 일련번호를 가진 상품 봉투가 있는 지 알 수 있다. 하지만 일반 투명 봉투인 reference 는 일련번호를 가지고 있지 않아서 이런 작업을 전혀 할 수 없다.
  6. '.' 를 사용( 포인터는 p->a ) : pointer 는 그 자체로 상품으로 대우 받는다. 그래서 이 상품 봉투를 다루는 상품 봉투만의 절차가 있다. 하지만 reference 는 그 자체로 상품이 아니라, 그 봉투가 가지고 있는 상품과 같은 대우를 받는다. 그래서 그 안에 들어있는 상품처럼 취급된다.

 

Reference

  1. What are the differences between pointer variable and reference variable in C++?
  2. 참조 와 포인터의 차이

댓글 없음:

댓글 쓰기