[C++] Static (정적 변수)PROGRAMMING/04. C++2024. 4. 24. 08:55
Table of Contents
반응형
Static (정적 변수)
모든 객체가 한 메모리를 공유하는 멤버 변수이다.
객체 별로 각각 할당되는 멤버가 아니라 모든 객체가 공유하는 멤버다.
메모리는 프로그램 시작 때부터 차지하고 있으며 메모리에 내내 값이 유지된다.
static 변수는 데이터(Data)영역에 저장되어 함수가 종료되더라도 프로그램이 종료되지 않는 이상 메모리상에 남아있다.
객체 생성 전에 반드시 전역 범위에서 미리 초기화해 주어야 한다.
객체 이름으로도 접근이 가능하지만 클래스 이름으로도 접근이 가능하다.
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <stdio.h>
class Test
{
public:
static int a; // 선언이므로 메모리 차지X
int b = 0;
};
int Test::a = 0; // 생성 전 전역 범위에서 초기화
void Variables()
{
int c = 0;
static int d = 0;
c++;
d++;
printf("c = %d, d = %d\n", c, d);
}
int main()
{
Test* ob = new Test();
ob->b = 10;
ob->a = 20; // 객체명 접근이 되지만, 내부적으로 Test::a = 20; 변환되어 들어가진다
printf("a = %d, b = %d\n", ob->a, ob->b);
Test::a = 30; // 이게 정상 문법이다
printf("a = %d, b = %d\n", ob->a, ob->b);
for (int i = 0; i < 5; i++)
Variables();
return 0;
}
|
/cs |
✅ 코드 분석 ✅
➡️ 6 Line 선언이기 때문에 실제 메모리를 사용하지는 않는다.
➡️ 10 Line 객체 생성 전에 자료형 이름 클래스이름::static변수이름 = 초기화할 값으로 초기화해 주어야 한다.
➡️ 27 Line static 변수이므로 결괏값이 초기화되지 않고 ++를 통해 계속 증가할 것이다.
➡️ 27 Line 객체 명으로 접근이 가능하지만, 내부적으로는 클래스 이름으로 접근하게 된다.
출처 및 참고: 강의 짱잘하시는 울 유니티 선생님 수업
반응형
@HYUNJZZANG :: HyunZzang
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)