c++/기초

전역변수와 지역변수

코드망령 2026. 5. 29. 18:06

전역 변수(Global Variable)와 지역 변수(Local Variable)

변수는 선언된 위치에 따라 전역 변수지역 변수로 나뉜다.

변수의 선언 위치에 따라 사용 범위(Scope)와 수명(Lifetime)이 달라진다.


전역 변수 (Global Variable)

함수나 클래스 등의 코드 블록 밖에서 선언된 변수이다.

프로그램 전체에서 접근할 수 있다.

선언

#include <iostream>

int a = 10;

void Func()
{
    std::cout << a << std::endl;
}

int main()
{
    std::cout << a << std::endl;

    Func();
}

특징

  • 함수 밖에서 선언한다.
  • 프로그램 시작 시 생성된다.
  • 프로그램 종료 시 제거된다.
  • 같은 파일 내에서는 어디서든 접근 가능하다.
  • 메모리의 데이터 영역(Data Segment)에 저장된다.

메모리 구조

int a = 10;
데이터 영역(Data Segment)
┌────────────┐
│ a = 10     │
└────────────┘

프로그램이 종료될 때까지 유지된다.


사용 예시

int Gold = 1000;

void Shop()
{
    Gold -= 100;
}

int main()
{
    Shop();

    std::cout << Gold;
}

실행 결과

900

지역 변수 (Local Variable)

함수 또는 코드 블록 내부에서 선언된 변수이다.

선언된 블록 안에서만 사용할 수 있다.

선언

int main()
{
    int a = 10;
}

특징

  • 함수 내부에서 선언한다.
  • 선언된 블록 안에서만 사용 가능하다.
  • 블록을 벗어나면 접근할 수 없다.
  • 함수가 종료되면 제거된다.
  • 스택(Stack) 영역에 저장된다.

사용 예시

int main()
{
    int a = 10;

    std::cout << a;
}

실행 결과

10

오류 예시

int main()
{
    int a = 10;
}

std::cout << a; // 오류

a는 이미 수명이 끝났기 때문에 접근할 수 없다.


메모리 구조

void Func()
{
    int a = 10;
}

함수 호출 시

스택 영역
┌────────────┐
│ a = 10     │
└────────────┘

함수 종료 시

스택 영역
┌────────────┐
│            │
└────────────┘

변수가 제거된다.


전역 변수와 지역 변수 비교

항목 전역 변수 지역 변수
선언 위치 함수 밖 함수 안
사용 범위 파일 전체(또는 extern 사용 시 여러 파일) 선언된 블록 내부
생성 시점 프로그램 시작 블록 진입
제거 시점 프로그램 종료 블록 종료
저장 위치 데이터 영역(Data Segment) 스택(Stack)
초기화 자동으로 0 초기화 자동 초기화 안 됨

변수 이름이 겹치는 경우

지역 변수가 전역 변수보다 우선된다.

int a = 100;

int main()
{
    int a = 10;

    std::cout << a;
}

실행 결과

10

지역 변수 a가 사용된다.


전역 변수 접근 (::)

지역 변수와 이름이 겹칠 경우 범위 지정 연산자를 사용하여 전역 변수에 접근할 수 있다.

int a = 100;

int main()
{
    int a = 10;

    std::cout << a << std::endl;
    std::cout << ::a << std::endl;
}

실행 결과

10
100

전역 변수 사용 시 주의점

전역 변수는 어디서든 수정할 수 있기 때문에 코드가 복잡해질 수 있다.

int Gold = 1000;
void Shop()
{
    Gold -= 100;
}
void QuestReward()
{
    Gold += 500;
}

규모가 커질수록 누가 값을 변경했는지 추적하기 어려워진다.

따라서 실무에서는 전역 변수 사용을 최소화하는 것이 좋다.


정리

  • 전역 변수는 함수 밖에서 선언되며 프로그램 종료 시까지 유지된다.
  • 전역 변수는 데이터 영역(Data Segment)에 저장된다.
  • 지역 변수는 함수나 코드 블록 내부에서 선언된다.
  • 지역 변수는 블록이 종료되면 제거된다.
  • 지역 변수는 스택(Stack) 영역에 저장된다.
  • 지역 변수가 전역 변수보다 우선적으로 사용된다.
  • :: 연산자를 사용하면 전역 변수에 접근할 수 있다.
  • 실무에서는 전역 변수 사용을 최소화하는 것이 좋다.

'c++ > 기초' 카테고리의 다른 글

오버로딩  (0) 2026.05.29
형변환  (0) 2026.05.29
함수  (0) 2026.05.29
구조체  (0) 2026.05.29
배열  (0) 2026.05.29