Class function과 const
안녕하세요.
Qt Creator를 사용하여 Class에서 Refactor로 Getter, Setter를 설정하면 아래의 함수와 같이 const가 붙는 경우가 있습니다.
uint32_t Server::getTunIP() const { return tunIP; }
위와 같은 코드에서 const가 붙는 경우 그 의미를 제대로 알지 않고 Refator에서 Getter, Setter에서 만들어준대로 사용하다, 문득 그 의미가 궁금해져 검색을 해 보았습니다.
뒤의 const의 의미는 해당 함수 내에서 Class함수의 변수(멤버)를 변경 할 수 없다는 것을 뜻합니다.
위의 코드를 포함하는 Class에서 tmp라는 변수가 있다고 가정 할 때에 다음과 같은 코드는 컴파일시 에러가 발생합니다.
uint32_t Server::getTunIP() const { tmp=248; return tunIP; }
위와 같이 const가 붙은 함수 내에서 tmp라는 변수를 임의의 값(248)로 초기화 하려고 할 때에 에러가 발생하게됩니다.
또는, 아래와 같이 Return Value에 const가 있는 경우가 있습니다.
const uint32_t Server::getTunIP() { return tunIP; }
함수의 Return값에 const가 붙은 경우 해당 리턴 값을 변경하지 못한 다는 것을 뜻합니다.
그러나, 위와 같이 Return 값에 const가 붙은 경우 레퍼런스(&)에 리턴 값을 저장 하지 않는 이상 const의 의미는 무색해집니다.
아래 소스코드처럼 컴파일시에 차이가 있습니다.(tmp는 const형으로 선언 된 변수가 아닐 뿐더러, 8번째 행에서는 값 복사가 일어나므로, 9번째에서 아무런 에러도 발생하지 않는 것 입니다.
int main() { uint32_t& ref=class.getTunIP(); ref=4; //occurred an error uint32_t tmp=class.getTunIP(); tmp=4; //Success to Compile return 0; }
코딩을 할수록 Secure Coding의 중요성을 깨닫게 되네요.
질문은 댓글로 받도록 하겠습니다.