레퍼런스(참조)에 대해 배웠다.
- 레퍼런스란?
- 포인터를 사용하면 주소값을 직접 다뤄야해 복잡해질 수 있다.
- 이 문제를 완화하기 위해 C++에서는 변수에 또 다른 이름을 부여하는 '레퍼런스'문법을 만들었다.
- 일반 변수와 거의 동일하게 사용할 수 있다.
- 특정 변수에 대한 별명을 부여하는 것이다.
- 한 번 특정 변수의 레퍼런스를 연결하면, 이후로는 마치 그 변수가 두 개의 이름을 갖는 것과 같다.
- 선언 방법은 데이터형 뒤에
&을 붙이는 것이다. 예)int&, cha&int& ref = var;처럼 사용한다. 이렇게 하면ref의 값 변경시var의 값도 변경 된다.
- 포인터와 레퍼런스의 차이점
포인터와 레퍼런스는 다른 변수를 제어한다는 점에서 유사하지만 몇 가지 중요한 차이가 있다.
- 선언과 초기화 시점이 다르다.
포인터는 선언 후, 나중에=연산자를 통해 가리킬 대상을 변경할 수 있다. 반면에 레퍼런스는 선언과 동시에 초기화해야 하며, 초기화 이후에는 다른 대상에 재연결할 수 없다.- 레퍼런스는 항상 다른 변수와 연결되어 있기 때문에 NULL이라는게 없다.
반면에 포인터는 유효한 대상이 없음을 나타내기 위해 NULL 혹은nullptr을 가질 수 있다.- 간접 참조 문법의 유무
포인터는 주소값을 담으므로 접근할 때는*연산을 사용하고 주소를 가져올 때는&연산을 사용한다.
하지만 레퍼런스는 변수 자체의 별명이므로 일반 변수와 연산하는 방법이 동일하다.
포인터와 레퍼런스까지 머리에 들어오기 시작하니 복잡해졌다.
키워드로 구분해서 외워야겠다. 포인터 = 주소, 레퍼런스 = 별명
코드를 많이 봐야 이것을 구분하고 이해하는 능력이 향상될 것 같다.
C++ 문법 - class, C++ 1단계 과제 수행