static 키워드

2020. 6. 17. 19:55프로그래밍/C++

static 변수

범위(scope)의 제한을 받는 전역 변수

> 메모리의 Data 영역에 저장 됨

> exe 안에 딱 하나만 있는 변수

 

어떤 범위?

> 파일 속

> 네임스페이스 속

> 클래스 속

> 함수 속


extern 키워드

> 다른 파일의 전역변수에 접근을 가능케 해줌

 

C 스타일 static

> 정적 변수가 함수 밖에 있다면, extern 써도 이 정적 변수에 접근할 수 없음


함수 속 정적 변수

함수로 범위(scope)가 제한된 전역 변수

void Accumulate(int number)
{
    static int result = 0; // 딱 한번만 수행.
                           // 한 번 초기화한 static 변수는 다시 초기화 하지 않고
                           // 코드 라인을 건너 뜀
    result += number;
    
    // ...
}

int main()
{
    // ...
    // (result에 접근 불가)
}

정적 멤버 변수

 

클래스당 하나의 COPY만 존재

개체의 메모리 레이아웃의 일부가 아님

클래스 메모리 레이아웃에 포함

exe 파일 안에 필요한 메모리가 잡혀 있음

> 컴파일러가 이 변수의 인스턴스가 몇 개 존재해야 하는지 알기에....

>> 오직 하나ㅎ

// Cat.h
class Cat
{
    // ...
private:
    static int mCount;
};

// Cat.cpp
int Cat::mCount = 0;
Cat::Cat()
{
    mCount++;
}

정적 멤버 변수 베스트 프랙티스

 

함수 안에서 정적 변수를 넣지 말 것

> 클래스 안에 넣을 것

 

전역변수 대신 정적 멤버변수를 쓸 것

> 범위(Scope)를 제한하기 위해

 

C스타일의 정적 변수를 쓸 이유가 이제 없음 


정적 멤버 함수

 

논리적인 범위(scope)에 제한 된 전역 함수

해당 클래스의 정적 멤버에만 접근 가능

개체가 없이도 정적 함수를 호출할 수 있음

> Math::Square(10);

 

 

 

출처 : 포큐아카데미 C++ 언매니지드 프로그래밍

'프로그래밍 > C++' 카테고리의 다른 글

STL 컨테이너 / 벡터(Vector) 1  (0) 2020.06.22
예외(Exception)  (0) 2020.06.18
인라인 함수(Inline Functions)  (0) 2020.06.17
캐스팅(형변환, Casting)  (0) 2020.06.16
추상 클래스 / 인터페이스  (0) 2020.06.12