C++에서 정적 멤버 변수(Static Member Variable)는
클래스 수준의 변수로, 클래스의 모든 인스턴스 간에 공유됩니다.
이러한 정적 멤버 변수를 활용해 클래스 마다 ID 번호를 부여하기 위해
uniqueID 를 선언하고 생성자에서 썼는데 다음과 같은 에러가 발생합니다.
_CNamuPage::uniqueID가 선언되지 않았다는 에러가 뜹니다.
class MyClass {
public:
static int staticVariable; // 정적 멤버 변수 선언
MyClass() {
staticVariable = 0; // 생성자 내부에서 정의
}
};
그렇다고 이렇게 생성자에 초기화 하게 되면
모든 클래스 인스턴스가 생성될 때마다 초기화가 발생합니다.
Static Member Variable을 정의할 때
생성자 내부에서 정의하면 생성자가 호출될 때마다
초기화가 발생하여 예상치 못한 동작을 초래할 수 있습니다.
따라서 Static Member Variable은 클래스 외부에서 선언하고 정의해야 하며,
이렇게 하면 초기화 시점이 명확하게 제어되며
클래스의 모든 인스턴스에서 공유될 수 있습니다.
이렇게 함으로써 코드의 가독성을 향상시키고 유지보수를 쉽게 할 수 있습니다.
Static Member Variable은 클래스의 모든 인스턴스 간에 공유되므로,
클래스가 관리해야 하는 공통된 상태를 표현하는 데 유용합니다.
예를 들어, 클래스 인스턴스 간에 유일한 ID 값을 유지하거나
공유 설정을 저장하는 데 사용될 수 있습니다.
정적 멤버 변수를 클래스 외부에서 정의하면 초기화 시점이 명확해집니다.
C++에서 정적 멤버 변수는 정의와 초기화가 분리될 수 있으며,
초기화는 맨 처음 해당 변수가 사용될 때 한 번만 발생합니다.
이로써 각 인스턴스가 생성될 때마다 초기화를 피할 수 있습니다.
클래스 외부에서 Static Member Variable을 선언하는 것은
코드를 읽기 쉽게 만들어주며, 유지보수를 더 쉽게 할 수 있습니다.
클래스 정의 자체와 클래스의 사용 사례 간에
변수가 어떻게 사용되는지 명확하게 나뉘게 됩니다.
Static Member Variable을 정의할 때 생성자 내부에서 정의하면
생성자가 호출될 때마다 초기화가 발생하여 예상치 못한 동작을 초래할 수 있습니다.
따라서 Static Member Variable은 클래스 외부에서 선언하고 정의해야 하며,
이렇게 하면 초기화 시점이 명확하게 제어되며
클래스의 모든 인스턴스에서 공유될 수 있습니다.
이렇게 함으로써 코드의 가독성을 향상시키고 유지보수를 쉽게 할 수 있습니다.