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

C++ 변수 완벽 가이드: 자료형과 스코프(변수 범위) 이해하기

C++ 변수란 무엇인가?

C++에서 모든 변수는 고유한 자료형(type)을 가집니다. 이 자료형은 다음 세 가지를 결정하는 핵심 요소입니다.

  • 변수가 차지하는 메모리의 크기와 배치 방식
  • 해당 메모리에 저장할 수 있는 값의 범위
  • 변수에 적용할 수 있는 연산의 종류

C++에서 변수는 다음과 같은 형식으로 선언합니다.

type variableName;

여기서 자료형은 int, bool, float, char 같은 기본형(primitive type)일 수도 있고, 열거형(enum), 다른 타입을 가리키는 포인터(pointer), 또는 구조체나 클래스로 정의된 복합 타입일 수도 있습니다.


변수 스코프(Scope)의 세 가지 종류

스코프(scope)란 프로그램 안에서 변수가 유효하게 사용될 수 있는 영역을 의미합니다. 크게 나누어 변수는 다음 세 곳에서 선언할 수 있습니다.

  • 함수 또는 블록 내부 → 지역 변수(Local Variable)
  • 함수 매개변수 정의 부분 → 형식 매개변수(Formal Parameter)
  • 모든 함수 외부 → 전역 변수(Global Variable)

지역 변수는 해당 함수나 코드 블록 내부의 문장에서만 사용할 수 있으며, 그 밖의 함수에서는 존재 자체를 알 수 없습니다.


예제 1: 지역 변수(Local Variable)

#include <iostream>
using namespace std;

int main () {
    // 지역 변수 선언
    int a, b;
    int c;

    // 실제 초기화
    a = 10;
    b = 20;
    c = a + b;

    cout << c;
    return 0;
}

실행 결과

30

변수 a, b, cmain() 함수 내부에서 선언되었기 때문에 함수 안에서만 유효한 지역 변수입니다.


예제 2: 전역 변수(Global Variable)

전역 변수는 모든 함수의 외부, 즉 보통 프로그램 상단에 정의됩니다. 전역 변수는 프로그램이 실행되는 동안 계속 값을 유지하며, 어떤 함수에서든 자유롭게 접근할 수 있다는 것이 가장 큰 특징입니다.

#include <iostream>
using namespace std;

// 전역 변수 선언
int g;

int main () {
    // 지역 변수 선언
    int a, b;

    // 실제 초기화
    a = 10;
    b = 20;
    g = a + b;

    cout << g;
    return 0;
}

실행 결과

30

이름이 같은 지역 변수와 전역 변수

지역 변수와 전역 변수가 같은 이름을 가질 수도 있습니다. 이때 함수 내부에서는 지역 변수의 값이 우선하여 사용됩니다. 만약 함수 안에서 같은 이름의 전역 변수에 접근하고 싶다면 범위 결정 연산자(scope resolution operator, ::)를 사용해야 합니다.


예제 3: 범위 결정 연산자(::) 활용

#include <iostream>
using namespace std;

// 전역 변수 선언
int g = 20;

int main () {
    // 같은 이름의 지역 변수 선언
    int g = 10;

    cout << g;   // 지역 변수 출력
    cout << ::g; // 전역 변수 출력
    return 0;
}

실행 결과

10
20

g만 출력하면 지역 변수의 값인 10이 출력되고, ::g처럼 범위 결정 연산자를 붙이면 전역 변수의 값인 20이 출력됩니다.


정리

  • C++ 변수는 자료형에 따라 메모리 크기, 저장 가능한 값의 범위, 적용 가능한 연산이 결정됩니다.
  • 변수는 지역 변수(함수/블록 내부), 형식 매개변수(함수 인자), 전역 변수(모든 함수 외부)로 나뉩니다.
  • 지역 변수는 해당 블록 안에서만 유효하고, 전역 변수는 프로그램 전체 생명주기 동안 유지됩니다.
  • 이름이 충돌할 경우 지역 변수가 우선하며, 전역 변수 접근에는 :: 연산자를 사용합니다.