응애맘마조
static 본문
static이란 정적 변수를 의미합니다. static으로 선언한 변수는 지역변수와 전역변수 두 가지의 특징을 가지게 됩니다.
static 지역변수
num1을 static으로 하고 num2를 지역변수로 선언했습니다.
실행결과 static으로 선언한 num1은 지역변수로 선언되었음에도 불구하고 전역변수처럼 출력이 되었습니다.
이를 통해서 static은 먼저 전역변수의 특징과 같고 0으로 초기화가 되며, 프로그램 시작과 동시에 할당 및 초기화가 되어서 종료될 때까지 남아있습니다. 단, 접근 범위는 Function() 함수 안에서만 가능하고 중괄호를 빠져나가게 되면 소멸합니다.
사용되는 이유는 전역변수는 함수 내 어디든 접근이 가능하지만 static은 전역변수보다 안정적이며 함수 접근 범위를 한 개로 제한하기 때문에 전역변수의 단점을 어느 정도 해결했습니다. 하지만 그렇다고 해서 무조건 static이 옳은 것은 아니며 전역변수 또한 필요한 경우에는 반드시 사용하고 절대 static을 전역변수로 대체하면 안 되지만 전역변수를 static으로 대체할 수 있다면 대체해서 안정성을 높이는 것이 좋습니다.
static 변수의 특징과 용도를 알게 되었습니다. 그래서 원래 static 안에 지역변수가 들어가는 것이 맞지 않기 때문에 static 변수라는 이름을 사용하는 표현이 맞다고 볼 수 있습니다.
static 멤버변수
일반적인 멤버변수와 다르게 클래스당 하나만 생성이 됩니다. 그렇기 때문에 클래스 변수라고도 합니다.
위에 작성한 static 변수 cnt1, cnt2는 메모리 공간에 단 하나만 할당이 되어서 공유되는 변수입니다. 그래서 Class1에 2개의 객체를 생성했을 때 cnt1을 공유하여 값이 증가하게 됩니다. 그 아래에 있는 클래스 Class2도 cnt2를 공유하여서 값이 증가하게 됩니다. 조금 다르게 0으로 초기화하는 것을 클래스 외부에서 했는데 전역변수처럼 이미 메모리 공간에 할당이 되어있기 때문에 클래스 외부에서 해야 됩니다.
이렇게 멤버변수에 접근하듯이 접근이 가능하지만 객체 내에 존재하지 않고 외부에 있으며 접근할 수 있는 권한만 준 것이며 생성과 소멸 또한 전역변수와 같습니다.
읽어주셔서 감사합니다.
'공부 > 개인' 카테고리의 다른 글
Call by value/address/reference (0) | 2023.03.30 |
---|---|
extern (0) | 2023.03.29 |
지역변수와 동적할당을 각각 스택과 힙에 할당하는 이유 (0) | 2023.03.27 |
메모리 구조 (0) | 2023.03.23 |
동적할당(Dynamic Allocation) (0) | 2023.03.08 |