본문 바로가기
IT/c++

C++ 참조자 (Reference) - 다른 객체의 별칭으로 사용되는 특별한 변수

by 뉴코딩맨 2023. 7. 29.
C++은 다양한 변수 타입을 지원하며, 그 중에서 참조자(Reference)는 특별한 변수 타입으로 다른 객체 또는 값의 별칭으로 사용되는 기능을 제공합니다. 이 글에서는 C++ 참조자에 대해 자세히 알아보고, 사용법과 특징을 살펴보겠습니다.

 

 

1. 참조자란?

참조자는 C++에서 다른 객체 또는 값의 별칭으로 사용되는 특별한 변수 타입입니다. 다른 변수에 대한 참조를 나타내는 것으로, 참조자를 사용하면 해당 변수의 값을 직접 변경할 수 있습니다. 참조자는 C++에서 세 번째 변수 타입으로 포인터와 마찬가지로 메모리의 다른 위치에 있는 개체를 참조합니다.
 

2. 참조자의 선언과 초기화

참조자를 선언할 때에는 해당 변수 타입에 앰퍼샌(&) 기호를 붙여주어야 합니다. 또한 참조자는 반드시 초기화되어야 합니다.
 
#include <iostream>

int main() {
    int num = 10;
    int &refNum = num; // 레퍼런스 선언과 초기화

    std::cout << "num: " << num << std::endl; // 출력 결과: num: 10
    std::cout << "refNum: " << refNum << std::endl; // 출력 결과: refNum: 10

    return 0;
}
 
위의 예제에서 refNum은 num의 참조자로, num의 값과 refNum의 값은 항상 동일하게 유지됩니다.

 

 

3. 참조자와 포인터의 차이점

참조자와 포인터는 모두 다른 변수를 참조하는 기능을 제공하지만, 사용 방법과 동작 방식에 차이가 있습니다. 주요한 차이점은 다음과 같습니다:
 
  • 포인터는 메모리 주소를 저장하는 변수이고, 참조자는 다른 변수의 별칭입니다.
  • 포인터는 널(null)을 가리킬 수 있지만, 참조자는 널이 될 수 없습니다.
  • 포인터는 가리키는 대상을 변경할 수 있지만, 참조자는 항상 처음에 참조한 변수를 가리킵니다.

4. 참조자 활용 예제

참조자는 함수의 매개변수로 사용되는 경우, 해당 변수를 직접 변경할 수 있는 장점이 있습니다.
 
#include <iostream>

void increment(int &num) {
    num++;
}

int main() {
    int num = 5;
    increment(num);
    std::cout << "num: " << num << std::endl; // 출력 결과: num: 6

    return 0;
}
 
위의 예제에서 increment 함수는 정수형 변수를 참조자로 전달받아 값을 증가시킵니다.
 

5. 참조자의 장점과 주의사항

참조자는 포인터보다 사용이 간편하고 코드의 가독성을 높여주는 장점이 있습니다. 하지만 잘못된 사용은 프로그램에 오류를 발생시킬 수 있으므로 주의가 필요합니다. 특히 참조자를 반환하는 함수를 사용할 때는 반환하는 변수의 생명 주기를 유의해야 합니다.
 

6. 결론

이 글에서는 C++의 참조자에 대해 알아보았습니다. 참조자는 다른 객체 또는 값의 별칭으로 사용되는 특별한 변수 타입으로, 선언과 초기화를 통해 사용할 수 있습니다. 참조자는 포인터와 차이점이 있으며, 함수의 매개변수로 사용되는 등 다양한 용도로 활용될 수 있습니다.
 

댓글