더북(TheBook)

1.8.5 포인터와 레퍼런스의 비교

레퍼런스에 비해 포인터가 갖는 주요 이점은 동적 메모리 관리 및 주소 계산 기능이다. 반면에 레퍼런스는 기존 위치를 참조해야 한다.* 따라서 레퍼런스는 (정말로 악의적인 의도를 갖고 트릭을 사용하지 않는 한) 메모리 누수를 남기지 않고, 참조한 개체와 같은 표기법을 사용한다. 불행하게도 레퍼런스의 컨테이너를 만드는 건 거의 불가능하다.

레퍼런스는 오류에 안전하지 않지만 오류 발생 가능성이 훨씬 적다. 포인터는 동적 메모리를 다룰 때만 사용해야 한다(예를 들어 리스트 또는 트리와 같은 데이터 구조를 동적으로 만들 때). 꼼꼼하게 테스트한 타입을 통해서만 사용하거나 가능하면 클래스 내에서 포인터를 캡슐화해야 한다. 스마트 포인터는 메모리 할당을 처리하며 클래스 내에서도 원시 포인터보다 우선적으로 고려해야 한다. 포인터와 레퍼런스를 비교한 내용은 표 1-9에 요약되어 있다.

▼ 표 1-9 포인터와 레퍼런스 비교

특징

포인터

레퍼런스

정의된 위치 참조

 

O

초기화 필수

 

O

메모리 누수 방지

 

O

개체와 같은 표기법

 

O

메모리 관리

O

 

주소 계산

O

 

컨테이너 만들기

O

 

 

* 레퍼런스는 임의의 주소를 참조할 수도 있지만, 하는 방법을 알려면 더 열심히 노력해야 한다. 여러분의 안전을 위해 포인터가 레퍼런스처럼 동작하지 않도록 하는 방법을 설명하지는 않겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.