프로그래밍 언어/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 세그먼트)
수명 프로그램 종료 시까지 유지
범위 선언된 위치에 따라 제한
연결성 전역 식별자의 외부 노출 여부 조절 가능