티스토리 뷰
※ 주의 사항 ※
- 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
앞서 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 키워드의 사용은 디버깅을 어렵게 만든다고 생각합니다.
'공부 일지 > CPP 공부 일지' 카테고리의 다른 글
C++17 객체 지향 언어와 객체(Object)의 개념 이해 (0) | 2022.02.08 |
---|---|
C++17 Date and time utilities (0) | 2022.02.07 |
C++ | 범위 기반 for문 (0) | 2021.08.09 |
C++ | 상수 표현식(constexpr ) (0) | 2021.08.07 |
C++ | 열거형 (0) | 2021.08.06 |