Nagie's DevStory

[CPP] 25. C++에서 static 키워드가 가지는 의미 본문

Programming/C++

[CPP] 25. C++에서 static 키워드가 가지는 의미

Nagie 2023. 10. 22. 01:50
728x90

C에서의 static을 한번 떠올려 보자

static 키워드를 사용하면 함수 내부에서 선언된 변수는 정적 지역 변수로 정의되고 한 번만 초기화되며

함수가 호출될 때 매번 초기화되지 않고 값이 유지된다고 했고

정적 전역 변수 역시 선언한 해당 파일에서만 접근 가능하다고 우린 공부했을 것이다.

 

하지만 C++에선 이 static의 의미가 다르다.

클래스 내부에서 static 키워드를 사용해 정의된 멤버 변수는 해당 클래스의 모든 객체가 공유하며 사용하는 

객체 전용의 전역변수 역할을 하게 된다. 아래는 정적 멤버 변수의 사용 예시다.

 

#include <iostream>

class MyClass {
public:

    static int sharedValue;
};

int MyClass::sharedValue = 0;

int main() {

    MyClass obj1;
    MyClass obj2;

    obj1.sharedValue = 42;
    std::cout << obj2.sharedValue << std::endl; // 출력: 42
}

 

덤으로 정적 멤버 함수라는 개념도 생겼는데

말 그대로 멤버 함수를 static 키워드를 사용해 클래스의 인스턴스에 속하지 않고 클래스 그 자체에 속하게 만들 수 있다.

이게 무슨 말 이냐면 static 키워드를 붙여 멤버 함수를 만들면 다른 소스 파일에서 사용할 때 굳이 인스턴스를 만들지 않고

스코프 연산자를 사용해 바로 접근이 가능하다는 거다. 아래는 정적 멤버 함수에 접근하는 예시다.

 

#include <iostream>

class MyClass {
public:

    static void staticFunction() {
    
        std::cout << "This is a static function." << std::endl;
    }
};

int main() {

    MyClass::staticFunction(); // 출력: This is a static function.
}

 

C의 static과 C++의 static 키워드는 다양한 문맥에서 사용이 되지만

위와 같이 각각의 용도와 동작이 다르므로 제대로 알고 사용해야 한다.

728x90
Comments