C, C++

[C++] static 키워드 제대로 알고 사용하자!: 클래스에서 정적 변수와 정적 함수 사용 방법, 특징, 주의사항

깃짱 2024. 5. 9. 08:00
반응형
반응형

 

C++에서 static 키워드는 클래스의 정적 멤버 변수와 정적 함수를 정의하는 데 사용됩니다.

정적 멤버들은 클래스의 모든 인스턴스 간에 공유되며, 클래스 인스턴스 없이도 접근하고 사용할 수 있습니다.

정적 멤버 변수와 함수는 클래스의 인스턴스와 관계없는 상태나 연산 을 다루고, 클래스 자체의 상태 정보를 유지하거나 클래스 수준의 연산을 수행할 때 유용합니다.

💋 정적 멤버 변수 (Static Member Variables)

class MyClass {
public:
    static int count; // 정적 멤버 변수 선언
    MyClass() { count++; }
    ~MyClass() { count--; }
};

int MyClass::count = 0; // 정적 멤버 변수 초기화
  • 클래스의 모든 객체에 의해 공유된다.
    • 인스턴스를 여러 개 생성하더라도, 정적 멤버 변수는 하나의 복사본만 유지
  • 한 객체가 정적 멤버 변수를 변경하면, 그 변경 사항이 모든 객체에게 반영
    • 모든 인스턴스에서 접근하는 static 변수는 항상 같은 값임!
    • 정적 변수가 객체에 속하는 것이 아니라 클래스 자체에 속하기 때문
  • 어디에 이런걸 활용하냐?
    • 클래스 인스턴스의 수를 추적하거나 특정 함수가 몇 번 호출되었는지 등의 정보를 기록하는 데 유용함.
  • 선언 방법?
    • 클래스 정의 내에서 정적 멤버 변수 앞에 static 키워드를 붙여 선언한다.

💋 정적 멤버 함수(Static Member Functions)

class MyClass {
public:
    static int count;
    static int getCount() { return count; } // 정적 멤버 함수 선언 및 정의
};

int MyClass::count = 0; // 정적 멤버 변수 초기화

// 정적 멤버 함수 호출
int currentCount = MyClass::getCount();
  • 클래스와 관련된 함수를 만들어서 클래스 안에 함수를 넣어놓아야 하지만, 이 함수가 클래스의 어떤 인스턴스와도 특별히 연관되지 않을 때 사용한다.
    • 어떤 인스턴스와도 연관이 없다 = 인스턴스 변수의 값에 관심이 없다
  • 정적 멤버 함수는 클래스의 정적 멤버 변수에만 접근할 수 있다.
    • 정적 멤버 함수가 클래스의 특정 인스턴스에 속하지 않기 때문
  • 특이하게 정적 멤버 함수는 클래스 인스턴스 없이 클래스 이름을 통해 직접 호출할 수 있다.
    • 클래스 인스턴스를 통해서도 호출할 수 있지만 일반적이지는 않다.

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형