Nagie's DevStory
[CPP] 25. C++에서 static 키워드가 가지는 의미 본문
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