코딩공부를 하며, 레퍼런스라는 개념이 사실상 이해가 안갔습니다.
하지만, 이제는 쉽게 이해하고 어떠한 사용법이 있는지 적어보도록 하겠습니다.
레퍼런스
int main() {
int a = 10;
int &b = a;
}
레퍼런스랑 포인터랑 좀 헷갈리는 경우가 많겠더라구요.
왜냐면 변수앞에 &를 쓰면 변수가 참조하는 주소인 포인터가 되니깐요.
하지만 지금 사용할 레퍼런스 개념은 별개로 생각하시면 좀 편할 것 같습니다.
레퍼런스는 변수의 또 다른 이름입니다.
a나 b나 똑같은 주소와, 똑같은 변수값을 공유하고 있어서 하나가 바뀌면 하나도 똑같이 바뀝니다.
b의 주소값을 출력해보나 a의 주소값을 출력해보나 같은 값이 출력됩니다.
(레퍼런스 b를 추가할때 메모리상 크기는 포인터의 크기가 추가됩니다.)
a 추가시 4byte
&b = a 레퍼런스 선언시 4(원래 int 값) + 4byte(32bit 기준 포인터 크기만큼 추가)
레퍼런스가 호출 규칙
int a = 100;
int &b; // error!!
int &c = a; // ok!!
int &d = 0; //error!!
1) 레퍼런스를 선언 할 때 변수의 이름명을 넣고 무조건 초기화해줘야합니다.
2) 레퍼런스는 NULL값이 무조건 되면 안됩니다.
3) 또한 0, 1, 2, 3 같은 상수에 별칭을 붙히려고 하면 안됩니다.
레퍼런스가 자주쓰이는 예제
void func(int &ref)
{
cout << ref << endl;
ref++
}
int main() {
int a = 100;
func(a);
}
함수의 매개변수로 자주 이용됩니다. 이렇게 되면 매개변수 값이 새로운 변수로 copy가 되지않아 더 안전합니다.
혹은 함수의 매개변수에 상수 참조를 붙힙니다.
void func(const int &ref){}
이러면, 함수에서 그 값을 빌려서 가져다 쓰기만 하는 것이지, 수정은 못하게 만들어줍니다.
레퍼런스 개념은 class의 개념에서 잘 이용됩니다.