티스토리 뷰

※ 주의 사항 ※

  • 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.

 

앞서 const와 explicit 키워드를 배웠습니다. 이 둘은 나름의 의미가 있으며, 또 유용하게 사용되는 키워드들입니다. 그런데 이번에 설명하는 mutable이라는 키워드는 가급적 사용하지 말아야 할 키워드입니다. 키워드 mutable은 다음과 같은 의미를 가집니다.

 

'const 함수 내에서의 값의 변경을 예외적으로 허용한다'

 

이 의미만 들어도 왜 가급적 사용하지 말아야 하는지 이해가 갈 듯합니다. 다음 예제를 보겠습니다.

#include <iostream>
using namespace std;

class Simple
{
private:
	int num1;
	mutable int num2;    //mutable 선언된 num2 변수

public:
	Simple(int n1, int n2) : num1(n1), num2(n2) {}
	
	void ShowSimpleData() const
	{
		cout << num1 << ", " << num2 << endl;
	}

	void CopyToNum2() const
	{
		num2 = num1;    //const 함수 내에서 num2 변수의 값 변경이 이루어짐
	}
};
int main(void)
{
	Simple sm(1, 2);
	sm.ShowSimpleData();
	sm.CopyToNum2();
	sm.ShowSimpleData();

	return 0;
}

/*
실행결과

1, 2
1, 1

*/

 

num2는 mutable로 선언되었습니다. 따라서 const 멤버 함수 내에서도 그 값을 변경할 수 있었습니다.

 

mutable 키워드를 사용하기에 따라 좋게 평가할 수도 있습니다. 하지만 이 키워드의 과도한 사용은 C++에서 그 중요성을 인정받은 키워드인 const 선언을 의미 없게 만들어 버립니다. 따라서 mutable 키워드는 가급적이면 사용하지 않는 것이 좋습니다.

 

그리고 이건 제 개인적인 생각이지만 mutable 키워드의 사용은 협업 과정에서 문제가 될 소지가 높습니다. 내가 작성한 코드를 다른 개발자가 봐야 할 경우도 분명히 있고, 반대로 다른 개발자가 작성한 코드를 내가 봐야 하는 경우도 분명히 있습니다.

 

그때 남이 작성한 코드의 어떤 const 함수 내에서는 변수의 값 변경이 없을 것이라고 예상했는데 mutable 키워드를 사용해서 몇몇 변수들의 값 변경이 이뤄지고 있었다면 지금까지 지나쳐온 다른 모든 const함수에 대해서도 다시 한번 검토해야 할 것이고 이는 코드의 가독성과 이식성을 심히 저해할 수 있다고 생각합니다. 즉 mutable 키워드의 사용은 디버깅을 어렵게 만든다고 생각합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함