static 멤버

Jin Hur·2021년 12월 8일
0

OOP with C++ 

목록 보기
15/30

reference:
"명품 C++ Programming" / 황기태
"전문가를 위한 C++" / 마크 그레고리

static 지정자는 변수와 함수의 생명 주기와 사용 범위를 지정하는 방식 중 하나이다.
c++에서 클래스 멤버 변수와 멤버 함수를 포함하여 모든 변수와 함수는 static 지정자로 선언 가능하다.

  • 생명 주기: 프로그램이 시작할 때(로드될 때) 생성되고 프로그램이 종료할 때 소멸한다. (data 영역에 로드)
  • 사용 범위: 변수나 함수가 선언된 범위내에서 사용. 전역 혹은 지역으로 구분.

static 멤버 vs non-static 멤버

static 멤버(class 멤버)

  • 공간 특성: 멤버는 클래스 당 하나 생성
    • 멤버는 객체 내부가 아닌 별도의 공간에 생성
    • 클래스 멤버라고 부름
  • 시간적 특성: 프로그램과 생명을 같이 함.
    • 프로그램 시작 시 멤버 생성
    • 객체가 생기기 전에 이미 존재
    • 객체가 사라져도 여전히 존재
    • 프로그램이 종료될 때 함께 소멸
  • 공유의 특성: 동일한 클래스의 모든 객체들에 의해 공유됨.

not-static 멤버

  • 공간 특성: 멤버는 객체마다 별도 생성
    • 인스턴스 멤버라고 부름 (<=> 클래스 멤버)
  • 시간적 특성: 객체와 생명을 같이 함
    • 객체 생성 시에 멤버 생성
    • 객체 소멸 시 함께 소멸
    • 객체 생성 후 객체 사용 가능
  • 공유의 특성: 객체끼리 공유되지 않음
    • 멤버는 객체 별로 따로 공간 유지

함수 안의 static 변수(static으로 선언된 지역변수)

함수(블록)을 벗어나도 소멸되지 않는다.(정적 변수) 그렇지만 함수 안에서만 접근할 수 있다. 주로 어떤 함수에서 초기화 작업 수행 여부를 기억하는 용도로 많이 사용한다.

void performTask() {
    static bool initialized = false;
    if(!initialized) {
        cout << "initializing" << endl;
       	// 초기화 수행
        initialized = true;
    }
    
    // to do something
}

0개의 댓글