[C/C++]Static Member Variable의 선언은 클래스 외부에서

HW·2023년 10월 22일
0

C/C++

목록 보기
3/5
post-thumbnail

서론

C++에서 정적 멤버 변수(Static Member Variable)는
클래스 수준의 변수로, 클래스의 모든 인스턴스 간에 공유됩니다.
이러한 정적 멤버 변수를 활용해 클래스 마다 ID 번호를 부여하기 위해
uniqueID 를 선언하고 생성자에서 썼는데 다음과 같은 에러가 발생합니다.


_CNamuPage::uniqueID가 선언되지 않았다는 에러가 뜹니다.

본론

문제 : 생성자 내부에서 Static Member Variable 정의하기

class MyClass {
public:
    static int staticVariable; // 정적 멤버 변수 선언

    MyClass() {
        staticVariable = 0; // 생성자 내부에서 정의
    }
};

그렇다고 이렇게 생성자에 초기화 하게 되면
모든 클래스 인스턴스가 생성될 때마다 초기화가 발생합니다.


Static Member Variable을 정의할 때
생성자 내부에서 정의하면 생성자가 호출될 때마다
초기화가 발생하여 예상치 못한 동작을 초래할 수 있습니다.

따라서 Static Member Variable은 클래스 외부에서 선언하고 정의해야 하며,
이렇게 하면 초기화 시점이 명확하게 제어되며
클래스의 모든 인스턴스에서 공유될 수 있습니다.
이렇게 함으로써 코드의 가독성을 향상시키고 유지보수를 쉽게 할 수 있습니다.

왜 클래스 외부에서 Static Member Variable을 선언해야 하는가

공통된 상태 유지:

Static Member Variable은 클래스의 모든 인스턴스 간에 공유되므로,
클래스가 관리해야 하는 공통된 상태를 표현하는 데 유용합니다.
예를 들어, 클래스 인스턴스 간에 유일한 ID 값을 유지하거나
공유 설정을 저장하는 데 사용될 수 있습니다.

명확한 초기화 시점:

정적 멤버 변수를 클래스 외부에서 정의하면 초기화 시점이 명확해집니다.
C++에서 정적 멤버 변수는 정의와 초기화가 분리될 수 있으며,
초기화는 맨 처음 해당 변수가 사용될 때 한 번만 발생합니다.
이로써 각 인스턴스가 생성될 때마다 초기화를 피할 수 있습니다.

유지보수와 가독성:

클래스 외부에서 Static Member Variable을 선언하는 것은
코드를 읽기 쉽게 만들어주며, 유지보수를 더 쉽게 할 수 있습니다.
클래스 정의 자체와 클래스의 사용 사례 간에
변수가 어떻게 사용되는지 명확하게 나뉘게 됩니다.

결론

Static Member Variable을 정의할 때 생성자 내부에서 정의하면
생성자가 호출될 때마다 초기화가 발생하여 예상치 못한 동작을 초래할 수 있습니다.
따라서 Static Member Variable은 클래스 외부에서 선언하고 정의해야 하며,
이렇게 하면 초기화 시점이 명확하게 제어되며
클래스의 모든 인스턴스에서 공유될 수 있습니다.
이렇게 함으로써 코드의 가독성을 향상시키고 유지보수를 쉽게 할 수 있습니다.

profile
예술융합형 개발자🎥

0개의 댓글