Dork's port

Class function과 const 본문

Develop

Class function과 const

Dork94 2017. 10. 26. 12:46

안녕하세요.

 

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의 중요성을 깨닫게 되네요.

 

질문은 댓글로 받도록 하겠습니다.

Comments