2007년 6월 18일 월요일

mutable

mutable은 C++언어 키워드이다. 이것은 멤버변수를 바꾸지 않는다고 명시적으로 선언한 메서드에서 멤버변수를 바꿀 때 사용한다. 말인지 소인지 개인지 분간이 안 간다면 아래 소스를 보자.

class CMyCount
{
public:
    size_t getCount(void) const
    {
       return m_count;
    }

    void doSomething(void) const
    {
       // blar blar...
       ++m_count;
    }

private:
    mutable size_t m_count;
};


doSomething은 CMyCount가 가지는 어떠한 변수도 바꾸지 않는다고 const를 써서 명시적으로 선언했다. 그런데 만약 이 함수를 호출한 회수를 통계로 내고 싶다면? 그것도 instance마다 달리 계산하고 싶다면? mutable이 없다면 상황이 꽤나 복잡해질 것이다. doSomething이라는 함수 형태(뒤에 const를 띄어내는 것으로)를 바꿔야한다. 그렇지 않으면 각 instance를 죄다 관리하여 doSomething을 호출할 때마다 카운팅하는 무언가 만들어야한다. ... 귀찮다.

그래서 멤버변수를 바꾸지 않는 메서드 안에서도 변수 내용을 바꿀 수 있도록 컴파일러에게 알려주는 것이 mutable이다. 지금은 딱히 이것이 통계 정보에나 쓰는 용도 말고는 떠오르지 않는다.