참조(Reference) vs 포인터(Pointer)
비교
- 성능 측면: 디스어셈블리를 진행해 본다면 사실 상 동일하다. 성능적 차이는 거의 없음
source: https://beginthread.tistory.com/165
- 편리성 측면: 참조 승! (참조:
.
vs 포인터: ->
)
- 초기화 여부
- 참조 타입은 대상이 있어야 한다. 따라서 참조 변수 초기화와 동시 참조할 대상을 지정해야 한다.
- 포인터 타입은 포인터 변수 초기화와 동시에 참조할 주소에 대해 초기화를 진행하지 않아도 된다.
- 포인터 변수는 NULL 값을 가질 수 있음. 이것이 장점이 될 수도 있다.
- 포인터 변수를 사용할 땐 왠만하면 NULL 체크를 해야하는 불편함이 생길 수 있다.
- 재할당 여부
- 참조 타입은 재할당 불가능
- 포인터 타입은 재할당 가능
편리성?
그렇다면 편리하다는 것이 무조건 좋을까?
매개변수가 참조형인 함수와 포인터형인 함수가 있을 때 포인터형인 함수는 원본을 전달하는 느낌이 더욱 강하다. 따라서 개발자가 코드를 작성할 때 원본을 조작한다는 느낌을 더욱 심어준다.
반면 참조로 접근할 경우, 원본이 아닌 스택 프레임의 변수로 생각할 가능성이 있기에 원본을 의도치 않는 방향으로 조작할 가능성이 있다.
위와 같은 경우는 const 참조형으로 매개변수를 선언할 수 있다.
무엇을 선호해야 하나?
=> Team by Team..