[C/C++] 11. 변수

찰규

·

2026년 8월 2일 (29일 전)

프로그래밍을 작성할 때 변수를 어디에 선언하느냐에 따라 변수의 수명과 접근할 수 있는 범위가 완전히 달라진다.

이번 시간에는 지역 변수와 전역 변수의 개념, 함수와 모듈화의 중요성, 그리고 중첩 블록에서의 변수 우선순위에 대해 알아본다.

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

변수를 나누는 가장 명확한 기준은 바로 '함수({}) 내부인가, 외부인가'이다.

  • 지역 변수 (Local Variable)

    • 함수 내부나 특정 중첩 블록({}) 안에서 선언된 변수다.

    • 선언된 해당 함수 또는 블록 내부에서만 유효하며, 블록을 벗어나면 메모리에서 소멸하여 접근할 수 없다.

    • 지금까지 작성했던 메인 함수 내부의 변수들이나, 함수의 매개변수(인자)들이 모두 지역 변수에 해당한다.

  • 전역 변수 (Global Variable)

    • 특정 함수 외부에 선언된 변수다.

    • 프로그램 전체 어디서나 접근 및 수정이 가능하며, 프로그램이 종료될 때까지 메모리에 유지된다.

2. 함수(Function)와 모듈화(Modularization)

프로그래밍에서 함수는 단순한 코드의 집합이 아닌, 독립적인 minimum 단위의 기능을 의미한다.

모듈화의 중요성

  • 기능의 분리

    • 거대한 시스템(예: 게임 캐릭터 커스터마이징, 전투 시스템 등)도 결국 잘게 쪼개진 작은 기능들의 조합으로 이루어진다.
  • 재사용성과 확장성

    • 하나의 함수에 너무 많은 기능을 집어넣으면 다른 곳에서 해당 기능을 재가공하여 쓰기 어렵다.

    • 바닥부터 작은 단위의 기능을 명확히 쪼개어(모듈화) 구현해야 필요할 때 해당 모듈을 가져다 재사용할 수 있다.

// 두 정수를 더해 반환하는 모듈화된 기초 함수 예시
int Add(int left, int right) {
    // left와 right는 Add 함수 내부에서만 유효한 지역 변수다.
    return left + right; 
}

3. 중첩 지역과 변수의 우선순위 (Scope Rule)

C/C++에서는 함수 내부에서도 중괄호({})를 사용해 새로운 지역(중첩 블록)을 생성할 수 있다.

  • 동일 지역 변수명 중복 불가

    • 같은 지역 안에서는 이름이 같은 변수를 중복 선언할 수 없다 (컴파일 에러 발생).
  • 중첩 블록에서의 변수 가리기 (Variable Shadowing)

    • 외부 지역에 존재하더라도, 내부 지역에서 동일한 이름으로 변수를 다시 선언하면 내부 지역에서는 해당 이름으로 선언된 변수가 우선순위를 가진다.

    • 내부 블록이 끝나는 순간, 그 안에서 선언되었던 지역 변수는 소멸하며 다시 바깥쪽 지역 변수를 참조하게 된다.

int main() {
    int iData = 10; // 메인 함수 지역 변수

    {
        int iData = 20; // 내부 중첩 지역 변수 (우선순위 적용)
        // 이 블록 안에서 iData는 20이다.
    }

    // 내부 블록이 끝났으므로 다시 메인 함수 지역의 iData(10)를 참조한다.
    return 0;
}

마무리하며

  • 변수는 선언된 위치에 따라 함수 내부의 지역 변수와 외부의 전역 변수로 구분되며, 이들은 함수라는 기준을 통해 명확하게 나뉜다.
  • 프로그래밍에서의 함수는 특정 기능을 최소 단위로 모듈화하여 관리하는 것이며, 잘게 쪼개진 모듈을 효율적으로 조합할수록 복잡한 기능을 체계적으로 구현할 수 있다.
  • 동일한 지역 내에서는 변수명의 중복이 불가능하나, 지역 안에 새로운 지역을 선언할 경우 내부 지역의 변수가 우선순위를 가지며 외부 변수와의 모호성을 해결한다.