[c++] 구조체와 클래스의 클래스 내부 정적 변수

구조체와 클래스는 자체적으로 멤버 변수를 포함하며 이러한 변수들은 해당 구조체나 클래스의 각 인스턴스에 속합니다. 하지만 때때로 모든 인스턴스가 공유하는 변수를 선언해야 할 때가 있습니다. 이때, 클래스 내부에 정적(static) 변수를 사용할 수 있습니다.

구조체 내부 정적 변수

구조체 내부에서 정적 변수를 선언하면 모든 구조체 인스턴스가 이 변수를 공유합니다.

struct MyStruct {
    static int count;
};
int MyStruct::count = 0; // 정적 변수 초기화

위 코드에서 countMyStruct의 모든 인스턴스에서 공유되는 변수입니다.

클래스 내부 정적 변수

클래스 내부에 정적 변수를 선언할 때는 static 키워드를 사용합니다.

class MyClass {
public:
    static int instanceCount;
};
int MyClass::instanceCount = 0; // 정적 변수 초기화

instanceCount 변수는 MyClass의 모든 인스턴스에서 공유됩니다.

클래스 내부에서 정적 변수 사용 예제

아래는 MyClass 클래스 내부에서 정적 변수를 사용하는 예제입니다.

#include <iostream>

class MyClass {
public:
    static int instanceCount;
    MyClass() {
        instanceCount++;
    }
};

int MyClass::instanceCount = 0;

int main() {
    MyClass obj1;
    std::cout << "Instance count: " << MyClass::instanceCount << std::endl;

    MyClass obj2;
    std::cout << "Instance count: " << MyClass::instanceCount << std::endl;

    return 0;
}

instanceCount 변수는 MyClass의 모든 인스턴스에서 공유되므로, 각 인스턴스가 생성될 때마다 값이 증가합니다.

요약

클래스 내부 정적 변수는 해당 클래스의 모든 인스턴스에서 공유되며, 클래스 멤버 함수 내에서 사용되는 경우 인스턴스화 없이도 접근할 수 있습니다. 이러한 특징을 활용하여 모든 인스턴스가 공유해야 하는 데이터나 행위를 구현할 수 있습니다.

참고 자료