C나 C++ 프로그래밍을 하다 보면 int와 const int&의 차이가 헷갈리는 경우가 많습니다. 이 글에서는 두 선언이 어떻게 다른지, 그리고 각각 어떤 의미를 가지는지 자세히 살펴보겠습니다.
int란 무엇인가?
int는 기본적인 정수형(integer) 데이터 타입입니다. 변수를 일반적인 방식으로 선언하면 해당 변수는 자유롭게 읽고 수정할 수 있습니다.
int a = 10;
a = 20; // 정상적으로 값 변경 가능const int&의 의미
const int&는 int const&와 동일한 표현입니다. 이는 '상수 정수에 대한 참조(reference)'를 의미합니다. 즉, 참조를 통해 원본 정수 값을 수정할 수 없습니다.
int x = 10;
const int& ref = x;
// ref = 20; // 컴파일 오류 발생: 참조를 통해 값 변경 불가
x = 20; // 단, 원본 변수 x 자체는 변경 가능int& const는 왜 문제가 될까?
반면 int& const처럼 참조 자체에 const를 붙이는 것은 의미가 없습니다. C++에서 참조(reference)는 한 번 초기화되면 다른 객체를 가리킬 수 없기 때문에, 본질적으로 이미 '상수'와 같은 성격을 지닙니다.
따라서 참조에 const를 붙이는 것은 중복(redundant)된 선언이며, 컴파일러는 경고(warning) 또는 오류(error)를 반환할 수 있습니다.
정리
- int: 일반 정수형 타입으로, 값을 자유롭게 변경할 수 있습니다.
- const int& (int const&): 상수 정수에 대한 참조로, 참조를 통한 값의 수정이 불가능합니다.
- int& const: 참조 자체는 이미 재바인딩이 불가능하므로 const가 중복되며, 컴파일러 경고나 오류의 원인이 될 수 있습니다.
함수 매개변수로 큰 객체를 전달할 때 복사 비용을 줄이면서 원본 보호까지 겸하고 싶다면 const int& 형태의 사용이 권장됩니다. 이는 C++에서 안전하고 효율적인 코드를 작성하는 대표적인 관용구(idiom) 중 하나입니다.