상수형 메서드
- 멤버변수에 읽기 접근은 가능하지만 쓰기는 허용되지 않는 메서드.
- 원형 뒤에 const예약어만 붙이면된다.
- 값을 변경하지 않는다는 안정성을 준다.
- 할 수만 있다면 '최선을 다해' const를 사용하기 바란다.
int GetData() const
{
return m_nData;
}
상수형 메서드에서 쓰기연산을 실행할 경우
class CTest
{
public:
int GetData() const
{
SetData(20); // 상수화된 메서드가 아니기 때문에 호출할 수 없다. 오류 발생.
m_nData = 20; //대입연산자 사용 불가능.
return m_nData;
}
int SetData(int nParam) {m_nData = nParam;}
개발자 마인드
정말 실력있는 C++프로그래머는 const를 제대로 사용할 줄 안다.
소스 코드에서 const 예약어의 개수만 세어봐도 작성자의 수준을 가늠할 수 있다.
const는 안전장치이자 배려이다.
상수형 메서드에서 쓰기가 허용되는 mutable예약어, const_cast< >
mutable 로 선언한 멤버 변수의 값은 상수형 메서드에서도 쓰기가 허용된다.
class CTest
{
public:
int GetData() const
{
//상수형 메서드라도 mutable 멤버 변수에는 값을 쓸 수 있다.
m_nData = 20;
return m_nData;
}
private:
mutable int m_nData;
}
const_cast<>는 형변환 연산자로 상수형을 제거한 형변환을 할 수 있다.
문법: const_cast<새형식>(대상)
void TestFunc(const int &nParam)
{
//상수형 참조였으나 일반 참조로 형변환.
int &nNewParam = const_cast<int &>(nParam);
nNesParam = 20; //쓰기가 가능해진다.
}
int main(){
int nData = 10;
TestFunc(10); //상수형 참조로 전달된다. 내부에서 형변환을 통해 값을 변경가능하게 한다.
cout << nData << endl;
return 0;
}
개발자 주의사항
mutalble이든 const_cast든 어쩔 수 없는 (미래의) 어느 경우 를 위한 것이니 결코 현재를 위한 것이 아니라는 사실이다. 그러니 사용에 신중에 신중을 기하기 바랍니다.
'◼️C++' 카테고리의 다른 글
[C++] 클래스의 정적멤버 (static) (0) | 2023.09.17 |
---|---|
[C++] delete 예약어를 이용한 명시적 메서드 삭제 (0) | 2023.09.17 |
[C++] 클래스 요구사항에 맞게 코드 구현하기 (0) | 2023.09.17 |
[C++] 메서드, this 포인터 (0) | 2023.09.17 |
[C++] 명시적 디폴트 생성자 (0) | 2023.09.17 |