위치: 클래스(또는 구조체) 안에 선언
수명: 객체가 생성될 때 메모리에 할당되고, 객체가 소멸될 때 해제됨
접근 범위: 접근 지정자(public, protected, private)에 따라 달라짐
특징
static을 붙이면 모든 객체가 공유 (정적 멤버변수)예시
class Player {
public:
int Health; // 멤버변수
};
Player p1;
p1.Health = 100;
위치: 함수나 블록({}) 안에 선언
수명: 해당 블록 실행 시 생성, 블록 종료 시 해제
접근 범위: 선언된 블록 내부에서만 사용 가능
특징
예시
void Test() {
int x = 10; // 지역변수
x++;
} // 여기서 x는 사라짐
위치: 모든 함수·클래스 바깥에 선언
수명: 프로그램 시작 시 생성, 종료 시 해제
접근 범위: 선언된 파일 전체(다른 파일에서 extern으로 참조 가능)
특징
예시
int Score = 0; // 전역변수
void AddScore() {
Score += 10; // 어디서든 접근 가능
}
| 구분 | 선언 위치 | 수명 | 접근 범위 | 메모리 위치 |
|---|---|---|---|---|
| 멤버변수 | 클래스 내부 | 객체 생성~소멸 | 접근 지정자에 따라 | 힙/스택/데이터 영역 |
| 지역변수 | 함수·블록 내부 | 블록 시작~종료 | 블록 내부 | 스택 |
| 전역변수 | 모든 함수·클래스 밖 | 프로그램 시작~종료 | 전역 | 데이터 영역 |
static으로 파일 한정