본문 바로가기
프로그래밍 언어/C++

[C++] mutable 키워드

by 까망 하르방 2025. 2. 21.
반응형

[C++] mutable 키워드

• const 멤버 함수에서도 특정 멤버 변수를 변경할 수 있도록 허용하는 키워드
• 주로 캐싱이나 디버깅 용도로 사용

 

 

[예시]

가정: 특정 함수 호출 횟수(counter) 알고 싶다

#include <iostream>

class Harbang
{
private:

public:
    Harbang(){}

    void show() const
    {
        int counter = 0;
        counter++;
        std::cout << counter << std::endl;
    }
};

int main()
{
    Harbang obj1;

    obj1.show(); // 1
    obj1.show(); // 1

    Harbang obj2;
    obj2.show(); // 1
}



Harbang 객체마다 고유의 counter 만들고 싶었지만
지역 변수를 사용하면 show() 호출할 때마다 초기화
이를 방지하기 위해 static 키워드 적용해보면 어떨까?


[예시] static 키워드 적용 시도

#include <iostream>

class Harbang
{
private:

public:
    Harbang(){}

    void show() const
    {
        static int counter = 0; // static 키워드
        counter++;
        std::cout << counter << std::endl;
    }
};

int main()
{
    Harbang obj1;

    obj1.show(); // 1
    obj1.show(); // 2

    Harbang obj2;
    obj2.show(); // 3
}



static 변수로 함수 호출할 때마다 초기화 되지 않지만
객체간 공유 하고 있기 때문에
obj1, obj2 객체가 서로 counter 공유하게 되어버렸다.

객체간 독립적인 변수를 가지고 싶다. → 멤버 변수
cosnt 멤버 함수내에서도 값을 변경하고 싶다. → mutable 키워드


[예시] mutalbe 키워드
const 객체 내부에서 변경 가능한 변수로 활용

#include <iostream>

class Harbang
{
private:
    mutable int counter;  // mutable 키워드 적용

public:
    Harbang(): counter(0) {}

    void show() const
    {
        counter++;
        std::cout << counter << std::endl;
    }
};

int main()
{
    Harbang obj1;

    obj1.show(); // 1
    obj1.show(); // 2

    Harbang obj2;
    obj2.show(); // 1
}

 

 

📌 [C++] 상수 멤버함수

 

[C++] 상수 멤버함수 const member function

상수 멤버 함수 (const member function)• 컴파일러에게 상수 멤버 함수인 것을 알게 해주는 것• 멤버 함수의 괄호() 뒤쪽에 const 키워드 사용 함수 선언과 구현으로 분리하는 경우 양쪽에 모두 붙인

zoosso.tistory.com

 

 

📌 [C/C++] const 키워드

 

[C/C++] const 키워드

const 키워드C 언어에서 const는 읽기 전용 변수로 만들어주는 예약어일 뿐완벽한 상수 기능을 갖도록 해주지 못했다.const int n; // 초기값 오류 없음char str[n]; // 배열의 요소 개수로 사용불가int*

zoosso.tistory.com

 

 

📌 [C/C++] static 변수

 

[C/C++] static 변수

static 변수- static 변수를 정적 변수라고 부릅니다.- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다.  하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것으로  지역변수 적

zoosso.tistory.com

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] 가상 소멸자  (3) 2025.02.24
[C++] 함수 바인딩 (Funciton Binding)  (3) 2025.02.22
[C++] 상수 멤버함수 const member function  (5) 2025.02.19
[C++] return by reference  (4) 2025.02.15
[C++] class this 키워드  (8) 2025.02.08

댓글