프로그래밍 언어/C++
C++ static - 1. static 키워드란?
개발_노트
2025. 3. 25. 19:48
✅ 1. static 키워드란?
C++에서 static 키워드는 변수나 함수, 클래스 멤버에 사용되어 다음의 세 가지에 영향을 줍니다:
- 수명 (Lifetime)
- 범위 (Scope)
- 연결성 (Linkage)
🔹 static의 의미와 개념적 정의
- static은 "정적(static)" 저장 클래스를 의미합니다.
- 변수나 함수가 선언된 위치에 따라 생명주기, 접근 범위, 연결성을 다르게 설정할 수 있습니다.
- 일반적으로 static은 선언된 객체가 프로그램 실행 도중 계속 메모리에 유지되도록 만듭니다.
📌 핵심 정리:
구분 | 의미 |
수명 (Lifetime) | 프로그램 전체 동안 지속됨 |
범위 (Scope) | 선언된 위치에 따라 접근 가능한 범위가 제한됨 |
연결성 (Linkage) | 다른 파일에서 해당 식별자를 참조할 수 있는지 여부 결정 |
🔹 메모리 구조에서 static의 위치: Data Segment
static 변수는 스택이나 힙이 아닌, 다음 메모리 영역에 위치합니다:
메모리 영역 | 설명 |
Data 영역 | 초기화된 전역 및 정적 변수 저장 |
BSS 영역 | 초기화되지 않은 전역 및 정적 변수 저장 (프로그램 시작 시 자동으로 0으로 초기화됨) |
Heap | 동적 메모리 할당 영역 (new, malloc) |
Stack | 함수 호출 시 생성되는 지역 변수 저장 |
Text(코드) 영역 | 실행 코드 저장 |
🔹 변수의 수명(Lifetime) vs 범위(Scope)
두 개념은 자주 혼동되지만, 명확히 구분해야 합니다.
개념 | 설명 | 예시 |
수명 (Lifetime) | 메모리에 존재하는 시간 | static 변수는 프로그램이 종료될 때까지 존재 |
범위 (Scope) | 접근 가능한 코드의 범위 | static 지역 변수는 선언된 블록 내부에서만 접근 가능 |
🧪 예시:
void counterFunc() {
static int count = 0; // 수명: 전체 프로그램, 범위: 함수 내부
count++;
std::cout << count << std::endl;
}
🔹 컴파일 시점의 연결성(Linkage) 이해
Linkage는 식별자가 여러 파일에서 연결 가능한지 여부를 결정합니다.
키워드 | 연결성 (Linkage) | 사용 위치 | 외부 참조 가능성 |
없음 (전역 변수) | 외부 연결성 (external linkage) | 파일 전역 | ✅ 다른 파일에서 참조 가능 |
static (전역 변수/함수) | 내부 연결성 (internal linkage) | 파일 전역 | ❌ 해당 파일에서만 유효 |
extern | 외부 연결성 (external linkage) | 변수 선언 시 | ✅ 다른 파일에 정의된 변수 참조 가능 |
📌 static 키워드를 전역 변수나 함수에 사용하면 파일 내에서만 접근 가능하도록 제한할 수 있어, 이름 충돌 방지 및 모듈화에 유용합니다.
✅ 요약
항목 | 내용 |
핵심 개념 | static은 수명, 범위, 연결성에 영향을 주는 키워드 |
메모리 위치 | 데이터 영역 (Data, BSS 세그먼트) |
수명 | 프로그램 종료 시까지 유지 |
범위 | 선언된 위치에 따라 제한 |
연결성 | 전역 식별자의 외부 노출 여부 조절 가능 |