1.2.5 Const 가 사용되는 여러가지 상황
const 키워드는 C++에서 여러 가지 목적으로 사용된다.
const의 모든 사용 케이스는 서로 연관되어 있기는 하지만, 각기 미묘한 차이가 있다.
const 상수
const는 constant에서 왔다.
C에서는 버전 번호와 같이 실행되는 동안 절대 변하지 않는 상수값에 이름을 부여하여 활용할 때 #define 전처리 메크로를 이용한다.
C++에서는 #define대신 const 키워드를 사용하는걸 권장한다.
cosnt키워드를 이용해서 상수값을 정의하는 것은 보통의 변수를 선언하는것 과 같은데,
단지 const키워드를 선언문 앞에 붙인다는 점이 다르다.
const로 선언된 변수는 컴파일러에 의해 변숫값이 바뀌지 않도록 보증되는 것이 일반 변수와 다른 점이다.
const float versionNumber = 2.0f;
const std::string productName = "Super Hyper Net Modulator";
위에 선언된 const는 절대 바뀌지 않는다.
파라미터 보호를 위한 const
C++에서는 const가 아닌 변수를 const 변수로 캐스팅할 수 있다.
특정 코드가 실행되는 동안 특정 변수를 상수화 하면, 의도하지 않게 값이 바뀌는 오류상황을 컴파일 타임에 알아낼 수 있다.
내가 작성한 코드를 누군가가 사용해야 할때, 전달된 파라미터 값을 무단으로 사용하지 않는다는걸 보증해야 할때 cosnt를 붙여버리면 해결책이 된다.
const 선언된 파라미터를 함수안에서 변경하면 컴파일에러가 발생한다.
void mysteryFunction(const std::string* someString)
{
*someString = "Test"; // 컴파일 오류 발생
}
int main()
{
std::string myString = "The string";
mysteryFunction(&myString);
return 0;
}
위와 같을 때, const는 변수를 변경하는 경우만 방지해준다.
참조형 const
참조형 파라미터에 const가 사용되는 경우도 흔히 있다.
참조형은 파라미터 변수를 변경할 수 있게 하려고 이용하므로, const를 사용하는건 일견 모순되어 보인다.
사실 참조형 파라미터 변수는 변숫값을 변경하는 목적 외에도 성능 관점에서 불필요한 값의 복제를 피하는 의도로 이용되는 경우도 많기 때문에, 이 경우에는 const가 의미있는 역할을 한다.
const이면서 참조형인 파라미터를 이용함으로써 값 복제 오버헤드도 피하고, 참조형의 위협 요소인 원본의 변조도 막는 효과를 얻는다.
참조형 const변수는 객체를 이용할 때 더 중요하다.
왜냐하면, 객체는 정수 기본 타입에 비해 덩치도 크고 복제 작업 자체가 의도하지 않은 부작용을 낳기 쉽기 때문이다.
void printString(const std;:string& myString)
{
std::cout << myString << std::endl;
}
int main()
{
std::string someString = "Hello World";
printString(someStrnig);
return 0;
}
'전문가를 위한 C++정리' 카테고리의 다른 글
1. C++와 STL 부딪혀보기 1.3 객체지향 언어로서의 C++ 1.3.1 클래스의 정의 (0) | 2024.01.11 |
---|---|
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.6 타입 추론2 (0) | 2024.01.10 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.4 예외 처리 (0) | 2024.01.10 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.3 C++의 문자열 (0) | 2024.01.09 |
1. C++와 STL 부딪혀보기 1.2 C++ 언어 심화 탐구 1.2.2 참조형 (0) | 2024.01.09 |