[C++] mutable에 대해서

조재훈·2024년 2월 1일

C++ mutable 키워드

이펙티브 모던 c++ 책을 읽다가 mutable 키워드를 봤다. 생소한 용어라 블로그에 정리하는게 좋을 것 같아 포스트를 작성함.

이 mutable이 잘은 쓰이진 않지만 C++ 개발자라면 알아두는 것이 좋으니까 이해해뒀다가 나중에 등장하면 '아 이거 그거였지'하고 스스로 뿌듯해 해보자.

mutable을 번역해보면 '변하기 쉬운'이라는 뜻이다. C++에서 이에 반하는 의미인 '변하지 않는'의 const 키워드가 있는데 결론부터 말하자면 임의 클래스 내부에 멤버 함수가 const로 선언되어 있을 때 원래 같으면 이 함수 내에서는 멤버 변수의 수정이 불가능하다. 하지만 멤버 변수 앞에 mutable 키워드를 추가한다면 const 함수 내에서도 멤버 변수의 수정이 가능하다.

class Person
{
	public:
    	void set() const
        {
        	a = 4;	// Error!
            b = 5;	// OK!
        }
    private:
    int a = 5;
    mutable int b = 3;
}

멤버 함수에 const를 안쓰면 되는거 아니야라고 생각할 수도 있겠지만 멤버 함수에서 두 변수를 사용하는데 한 변수는 불변이고 다른 변수는 변해도 되는 경우일 때는 코드의 안전성을 위해 const를 사용하고 mutable을 적절하게 사용하는 게 좋지 않을까?

mutable을 활용하는 예로는 캐시된 값을 관리, 멀티 스레드 환경에서 스레드 안전성을 위해서가 있다.

profile
나태지옥

0개의 댓글