본문 바로가기
프로그래밍

mutable 키워드

by _BlankSpace 2017. 3. 25.

 0. 정리에 들어가기 전에. 

오늘은 초보 프로그래머라면 꽤 생소할 수 있는 키워드를 정리하고자 합니다.


바로 mutable 키워드 입니다.


mutable 키워드는 C를 접하면서 공부를 하고 있는 사람들도 써보지 않거나 존재 조차를 모르는 사람들이 있을 것입니다.


따라서 간단하게 mutable 키워드의 사용 목적 또한 사용 방법에 대해 글을 다루겠습니다.


 1. mutable이란 무엇인가요. 

먼저 mutable 키워드의 의미는 다음과 같습습니다.


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


의미에 나와 있는 거처럼 mutable 키워드는 사용 빈도 수가 낮아야 되는 것이 당연하다고 생각합니다.


그 이유는 이미 유추하셨겠지만, 코드에서 암묵적인 형변환이 자주 일어나면 그것을 일일히 생각해야 하는 것은 물론이고, 컴파일이나 런타임에서 문제가 발생할 가능성이 있습니다.


그런데, const 함수를 예외적으로 허용하겠다는 말은 엄청난 것일 겁니다. 먼저, const라는 키워드는 예외적으로도 값을 변경하지 않겠다는 의도로 프로그래밍에 사용한 것입니다.


하지만, 이러한 예외를 예외로 하겠다는 것입니다. 뭔가 아이러니합니다. 그만큼 mutable 키워드는 아주 정말 필요할 때 사용한다는 것을 이해할 수 있습니다.


그렇다면, 간단하게 예제를 보겠습니다.


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
29
30
31
32
33
34
#include <iostream>
using namespace std;
class MutableEx
{
private:
    int num1;
    mutable int num2;
public:
    MutableEx(int n1, int n2);
    void showData() const;
    void copyToNum2() const;
};
MutableEx::MutableEx(int n1, int n2) 
    : num1(n1)
    , num2(n2)
{
}
void MutableEx::showData() const
{
    std::cout << num1 << ", " << num2 << std::endl;
}
void MutableEx::copyToNum2() const
{
    num2 = num1;
}
int main(void)
{
    MutableEx mb(12); 
    mb.showData();
    mb.copyToNum2();
    mb.showData();
    return 0;
}
 
cs



결과

1
2
12
11
cs


mutable을 사용하지 않았다면 copyToNum2은 const 키워드로 인해서 문제가 발생했을 것입니다.


하지만 mutable 키워드를 사용함으로써, num1으로 값이 대입되는 것을 볼 수 있습니다.


따라서 정말 필요할 경우가 아니면 mutable을 사용하는 것은 자제해야 할 것으로 보입니다.


물론, 있으면 유용할 하지만 정말 빈도는 적게 사용할 때, 필요한 함수라는 것은 인정합니다.


그렇지만, 이것을 자주 사용한다면, 혼자서 프로그래밍 한다면 상관없겠지만, 동료 또는 팀과 함께하는 프로그램 구현이라면 상당한 욕을 먹을 수 있는 행동이라고 생각하네요.. 뭐든 지, 적당한 것이 좋다고 생각하지만, 이 mutable 키워드는 아주 적게 또는 아예 사용하지 않았으면.. 좋겠습니다. 아예 그러한 상황이 안오게 프로그래밍 하는 것이 가장 좋겠습니다. (물론, 그게 가능했다면 ㅠㅠ..)


이상 글을 마치겠습니다.


저의 글이 도움이 되셨거나, 공감이 되셨다면 공감 버튼 한번 씩 꾸욱 눌러주시면 정말 감사하겠습니다.


저에게는 큰 도움이 됩니다. 감사합니다.

'프로그래밍' 카테고리의 다른 글

[STL] Vector 정리  (0) 2017.04.14
STL vector sort(벡터 정렬) (2)  (0) 2017.04.08
STL vector sort(벡터 정렬) (1)  (1) 2017.04.08
STL Vector정리(1)  (0) 2017.04.08
HTTP의 기본  (0) 2017.02.13

댓글