Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++에서 전역 변수가 나쁜 이유와 안전하게 다루는 방법

전역 변수(Global Variable)는 프로그램 내 어떤 함수의 외부에서 선언하고 정의하는 변수입니다. 전역 변수는 프로그램이 시작될 때 생성되어 종료될 때까지 값을 유지하며, 실행 중 어디서든 접근할 수 있다는 특징이 있습니다.

전역 변수가 위험한 이유

const로 선언되지 않은 전역 변수는 프로그램 내 어떤 함수든 그 값을 자유롭게 변경할 수 있기 때문에 잠재적으로 위험합니다. 값이 예기치 않게 수정되면 버그를 추적하기 어려워지고, 코드 간 의존성이 높아져 유지보수가 힘들어집니다.

또한 전역 변수를 사용하면 프로그램의 모듈성(modularity)과 유연성(flexibility)이 크게 떨어집니다. 함수가 외부 상태에 의존하게 되면 독립적으로 테스트하거나 재사용하기 어렵습니다. 따라서 가능한 한 전역 변수 대신 지역 변수(local variable)를 사용하는 것이 권장됩니다.

전역 변수를 더 안전하게 사용하는 방법

불가피하게 전역 변수를 사용해야 한다면 다음과 같은 방법으로 위험을 줄일 수 있습니다.

  • 'g_' 접두사 붙이기: 변수 이름 앞에 'g_'를 붙이면 해당 변수가 전역 변수임을 쉽게 알 수 있고, 지역 변수와의 이름 충돌(naming collision)도 예방할 수 있습니다.
  • static으로 감추기: 전역 변수를 static으로 선언하면 해당 변수의 가시 범위(scope)가 현재 파일(번역 단위)로 제한되어, 외부 파일에서 함부로 접근하거나 변경할 수 없게 됩니다. 일종의 캡슐화 효과를 얻을 수 있습니다.

C 언어 전역 변수 예제

#include <stdio.h>
int g_var;
static int g_var1;

int main () {
    int a = 15;
    int b = 20;

    g_var = a + b;
    g_var1 = a - b;

    printf("a = %d\nb = %d\ng_var = %d\n", a, b, g_var);
    printf("g_var1 = %d", g_var1);

    return 0;
}

실행 결과

a = 15
b = 20
g_var = 35
g_var1 = -5

위 예제에서 g_var는 일반 전역 변수이고, g_var1은 static으로 선언된 전역 변수입니다. 두 변수 모두 main 함수 밖에서 선언되었지만, static 변수는 같은 파일 내에서만 접근 가능하다는 차이가 있습니다.