따..딱히 공부하려고 포스팅하는 건 아니니까..!
포인터(Pointer)와 레퍼런스(Reference) 본문
포인터와 레퍼런스
|
포인터 |
레퍼런스 |
표현 |
* |
& |
의미 |
메모리 주소를 가리킨다 |
값에 직접 접근하는 주소 |
변수 접근시 나타나는 값 |
가리키는 주소가 가진 변수의 값 |
변수의 내용이 저장된 메모리 주소값 |
상수 참조 |
X |
X |
NULL 초기화 가능여부 |
O |
X |
초기화 | 객체(변수)의 주소값을 입력받음 | 객체(변수)를 직접 입력받음 |
초기화 여부 |
꼭 하지 않아도 됨 |
반드시 해야함(나중에 값을 바꿀 수 없기 때문에) |
초기화 이후 |
다른 변수 참조 가능 |
다른 변수 참조 불가능 |
특징 | 메모리 공간을 할당함, 포인터가 가리키는 주소의 크기는 자료형이 무엇이든 간에 항상 같다. | 메모리 공간이 할당되는 것이 아님, |
(출현 순서 : call by value -> call by address (= pointer) -> call by reference)
사실 포인터와 레퍼런스를 사용하는 이유는 크게 다르지 않습니다. 두가지 방법 모두 주소값을 이용하여 데이터 처리를 하기 위해 사용합니다. 그런데 사용하는데 있어서는 레퍼런스가 더 사용하기 쉽습니다. 이렇게 레퍼런스가 더 사용하기 쉬운데도 불구하고 아직도 포인터를 사용하는 이유는 무엇일까요? 바로 포인터는 call by value의 장점과 call by reference의 장점을 동시에 가지고 있기 때문입니다.
포인터는 주소공간을 복사한다는 call by value의 장점을 가지기 때문에 4byte 혹은 8byte의 고정된 크기를 가지면서 가리키는 것을 바꿀 수 있습니다.
즉, 포인터의 사용 이유를 요약하자면 다음과 같습니다.
1. 가리키는 값을 바꾸기 위해서이다.
2. 가리키는 값은 바꾸지 않고 성능을 향상시키기 위해서이다.
(ex : const Node * a으로 선언하면 포인터변수 a는 4byte(32비트) 혹은 8byte(64비트)의 크기로 값을 넘겨받을 수 있다)
'C/C++' 카테고리의 다른 글
추상화(Abstraction) (0) | 2015.02.05 |
---|---|
컴파일과 링크 (0) | 2014.12.30 |
#define보다 const가 더 유용한 이유 (0) | 2014.12.09 |
변수와 메모리공간 (0) | 2014.12.02 |
객체지향 프로그래밍과 절차지향 프로그래밍 (0) | 2014.12.02 |