본문 바로가기

개발 관련 기타/C++

[C++] 클래스 멤버 함수 (class member function) 를 static (정적) 으로 선언 하는 이유

본론으로 가기 전에 정적 멤버 변수 (class member variable) 부터 보도록 하겠습니다.

  • 정적 멤버 변수는 전역 변수와 저장원리가 같습니다.
  • 정적 멤버 변수는 클래스 외부 (file scope) 단위로 초기화 되어야 합니다.
    • 글로벌 변수를 초기화 하는 것처럼. 소스 코드 파일 (.cc) 내 함수 외부에서 int class::variable = 0 이런식으로 초기화 되어야 합니다.
    • private로 선언한 정적 멤버 변수 역시 같은 방법으로 초기화 되어야 합니다. private 클래스 멤버의 경우 클래스 함수 내에서만 접근 가능하지만 이같이 소스 파일에 적어 초기화를 할 때만 예외를 둡니다.
  • 정적 멤버 변수는 클래스 내 모든 객체가 공통으로 사용 할 수 있습니다. public으로 선언된 정적 멤버 변수는 누구나 접근이 가능합니

그러면 만약 정적 멤버 변수가 private 로 선언되어 있다면 어떻게 접근 할까요?

  • 접근에 필요한 클래스 인스턴스를 초기화하고 필요한 멤버 함수를 호출 할 수 있을 것입니다.
  • 하지만, 간단한 작업이라면 static 멤버 함수를 하나 두어 인스턴스 초기화가 필요하지 않도록 할 것입니다.
  • 결론으로, 멤버 함수를 static으로 선언하는 이유 중 하나는 private로 선언한 정적 멤버 변수를 클래스 외부에서 static 멤버 함수를 호출해 접근 가능하도록 만들기 위해서 입니다.