23. C++ 전역변수, 지역변수, 정적변수

C++ 전역변수, 지역변수, 정적변수

1. 개요

1.1 문서 개요

이 문서는 C++ 언어에서 사용되는 변수 유형 중 전역변수(Global Variable), 지역변수(Local Variable), **정적변수(Static Variable)**에 대해 설명합니다. 각각의 변수는 메모리 저장 위치, 수명, 접근 범위, 초기화 방식에서 차이가 있으며, 프로그램의 구조적 설계와 자원 효율에 영향을 미칩니다.

이 개념들은 함수 또는 클래스 내부·외부에서의 변수 선언과 관련되어 있으며, C++의 스코프 및 저장 영역 분류(Storage Class)와 밀접하게 연결되어 있습니다.

2. 내용

2.1 전역변수 (Global Variable)

2.1.1 정의 및 특성

전역변수는 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근할 수 있습니다. 일반적으로 파일 상단 또는 모든 함수 외부에서 정의되며, 데이터 세그먼트(Data Segment) 영역에 저장됩니다.

  • 수명: 프로그램 시작 시 생성되어 종료 시까지 유지됩니다.
  • 접근 범위: 선언된 파일 전체 및 extern을 통해 다른 파일에서도 접근 가능
  • 초기화: 명시적으로 초기화하지 않으면 0으로 자동 초기화
2.1.1.1 예시
#include <iostream>

int globalVar = 10;

void printGlobal() {
    std::cout << "Global Variable: " << globalVar << std::endl;
}

int main() {
    globalVar += 5;
    printGlobal();  // 출력: Global Variable: 15
    return 0;
}

2.2 지역변수 (Local Variable)

2.2.1 정의 및 특성

지역변수는 함수, 제어문 블록(if, for 등) 내에서 선언되는 변수입니다. 메모리의 스택(Stack) 영역에 저장되며, 해당 블록이 끝나면 소멸합니다.

  • 수명: 선언된 블록 진입 시 생성, 블록 종료 시 소멸
  • 접근 범위: 선언된 블록 내부
  • 초기화: 자동으로 초기화되지 않으며 명시적 초기화 필요
2.2.1.1 예시
#include <iostream>

void exampleFunction() {
    int localVar = 5;
    std::cout << "Local Variable: " << localVar << std::endl;
}

int main() {
    exampleFunction();  // 출력: Local Variable: 5
    // std::cout << localVar;  // 오류: localVar는 main에서 접근 불가
    return 0;
}

2.3 정적변수 (Static Variable)

2.3.1 정의 및 특성

정적변수는 static 키워드로 선언된 변수로, 지역 또는 전역에서 사용 가능합니다. 저장 위치는 **데이터 세그먼트(Data Segment)**이며, 초기화는 한 번만 수행됩니다.

  • 지역 정적변수: 선언된 함수 내에서만 접근 가능하지만, 수명은 프로그램 종료 시까지 유지됩니다.
  • 전역 정적변수: 다른 파일에서 접근 불가 (링크 범위 제한)
  • 초기화: 한 번만 수행되며, 초기화하지 않으면 0으로 초기화됨
2.3.1.1 지역 정적변수 예시
#include <iostream>

void counterFunction() {
    static int counter = 0;
    counter++;
    std::cout << "Counter: " << counter << std::endl;
}

int main() {
    counterFunction();  // 출력: Counter: 1
    counterFunction();  // 출력: Counter: 2
    counterFunction();  // 출력: Counter: 3
    return 0;
}
2.3.1.2 전역 정적변수 예시
// file1.cpp
static int fileScopeVar = 100;  // 다른 파일에서 접근 불가

2.4 비교 정리

2.4.1 변수 유형별 비교표

항목 전역변수 지역변수 정적변수
선언 위치 함수 외부 함수 또는 블록 내부 함수 내부 (지역) 또는 외부 (전역)
저장 영역 데이터 세그먼트 스택 데이터 세그먼트
수명 프로그램 종료 시까지 블록 종료 시까지 프로그램 종료 시까지
접근 범위 전체 파일 및 extern 선언된 블록 내부 선언된 블록 또는 파일 내부
초기화 여부 자동(0) 수동 자동(0), 단 1회 초기화

3. 마무리

전역변수, 지역변수, 정적변수는 C++에서 변수의 접근성과 수명을 제어하는 중요한 구성 요소입니다. 전역변수는 광범위한 접근성을 제공하지만 관리에 유의해야 하며, 지역변수는 블록 내 제한된 수명으로 안전성을 확보합니다. 정적변수는 지역성과 장기적인 상태 유지를 동시에 가능하게 하여 특수한 목적에 적합합니다.

이러한 변수 유형은 프로그램의 메모리 구조 및 동작 흐름을 이해하고 제어하는 데 필수적인 기초 개념입니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤