열렬히.뛰기

레퍼런스 (1)

Language > 프로그래밍 언어 > C++ > Cpp : 기초 > 레퍼런스 (1)

레퍼런스란?

  • 특정 변수의 실제 이름 대신 사용할 수 있는 별명
  • cpp에서 지원하는 변수 타입의 일종이다.
  • 대상 변수와 같은 메모리 위치를 참조한다.

사용 방식

cpp
int a;
int &b = a; // b는 a의 참조자

/* <특징>
1. 참조자 타입 == 대상 변수 타입
2. 선언과 동시에 초기화
------ 잘못된 예시 ------
	int &b;
	b = a;
------ -------- --------
3. 참조 대상 변경 불가.
------ 잘못된 예시 ------
	int &b = a;
	b = c;
------ -------- --------
*/

사용 예시

cpp
int x = 10;
int &y = x;

y++;
cout << y << " " << x << endl; 
// 결과는 둘 다 11이다.
// 참조 대상과 같은 곳을 가리키고 있기 때문.

레퍼런스는 주로 함수의 인수가 객체일 때 사용한다.

cpp

// 값으로 전달 => call-by-value
void addOne(int y) {
	// y의 복사본을 만든 후, "+ 1"을 수행한다.
	// 복사본이 큰 경우, 성능이 저하된다.
	y += 1;
}


// 레퍼런스로 전달 => call-by-reference
void addOne(int &y)
{
	// y의 대상 변수가 같이 변하게 됨.
	y += 1;
}

원래 값이 영향을 안 받게 하고 싶으면 const 키워드를 쓴다.

cpp
void Number::foo(const int& x)
{
	std::cout << x << std::endl; // 올바른 사용
	x = x * 10 + 12; // 잘못된 사용 (값을 변경할 수 없음)
}

레퍼런스 vs 포인터

반면 포인터는 다음과 같이 쓴다.

cpp

왜 레퍼런스인가?

  1. 포인터보다 더 안전하다.