C 기본 문법 – 변수와 상수 – 1 – 변수의 스코프

C 기본 문법 – 변수와 상수 – 1편: 변수의 스코프(Scope) 완전 정복

안녕하세요, 코딩을 사랑하는 여러분 😊
오늘은 C 언어의 변수 중에서도 실무와 시험에서 정말 자주 마주치는 개념!
바로 **변수의 스코프(Scope, 유효 범위)**에 대해 알아보겠습니다.

변수의 스코프는 마치 변수가 살아서 활동할 수 있는 공간이에요.
“어디까지 이 변수를 사용할 수 있는가?”라는 범위의 개념이죠.

스코프를 이해하지 못하면, 동일한 변수 이름을 여러 번 사용하거나,
사용할 수 없는 변수를 사용하려고 해서 오류가 발생
하기도 해요.

자, 그럼 차근차근! 스코프의 개념부터 종류, 예시, 주의사항까지
풍부한 비유와 예제로 완벽하게 알려드릴게요 😊


변수의 스코프란?

변수의 스코프(Scope)는 변수가 선언된 이후부터 접근이 가능한 코드 범위를 의미합니다.
즉, “이 변수는 어디까지 쓸 수 있나요?”를 결정하는 중요한 규칙이에요.

🎯 비유하자면,
변수는 “그 지역에서만 활동 가능한 알바생”이라고 생각해 보세요!
변수의 스코프는 그 알바생이 일할 수 있는 구역이에요.
지역 변수는 자기 구역에서만, 전역 변수는 전체 매장 어디서든 일할 수 있는 것과 같죠!


C 언어의 스코프 종류

종류 설명 선언 위치
전역 스코프(Global Scope) 프로그램 전체에서 접근 가능 함수 바깥
지역 스코프(Local Scope) 특정 함수나 블록 내부에서만 유효 함수 안 또는 {} 내부
블록 스코프(Block Scope) 제어문이나 중괄호 블록 내부 if, while, for
파일 스코프(File Scope) 한 파일 내에서만 접근 가능 (static) 파일 상단에 static 사용

1. 전역 변수(Global Variable)

#include <stdio.h>

int count = 10;  // 전역 변수

void showCount() {
    printf("count: %d
", count);
}

int main() {
    count = 20;
    showCount();  // 출력: 20
    return 0;
}
  • 함수 외부에서 선언
  • 모든 함수에서 접근 가능
  • 프로그램 종료 시까지 유지

📌 너무 남용하면 코드가 꼬일 수 있으니 조심하세요!


2. 지역 변수(Local Variable)

#include <stdio.h>

int main() {
    int x = 5;  // 지역 변수
    printf("x = %d
", x);
    return 0;
}
  • 함수 내부에서 선언
  • 해당 함수 내에서만 접근 가능
  • 함수가 끝나면 소멸됨

3. 블록 스코프(Block Scope)

#include <stdio.h>

int main() {
    int x = 10;

    if (x == 10) {
        int y = 20;  // y는 이 블록에서만 유효
        printf("x + y = %d
", x + y);
    }

    // printf("%d
", y);  // 오류! y는 if문 밖에서 접근 불가
    return 0;
}
  • {} 블록 내에서 선언된 변수
  • 블록을 벗어나면 자동으로 사라짐

🧠 블록 스코프는 메모리 절약에 유리하고, 코드 구조도 깔끔하게 해줘요.


4. 함수 매개변수도 지역 변수!

void greet(char name) {
    printf("Hello, %c!
", name);
}
  • namegreet 함수에서만 사용 가능
  • 함수 호출이 끝나면 사라짐

매개변수는 함수 내에서 선언된 특수한 지역 변수라고 보시면 돼요!


5. 중첩된 스코프에서는 가장 가까운 변수가 우선

#include <stdio.h>

int x = 1;  // 전역 변수

int main() {
    int x = 2;  // 지역 변수 (전역 x는 가려짐)
    {
        int x = 3;  // 블록 변수 (지역 x도 가려짐)
        printf("x = %d
", x);  // 출력: 3
    }
    printf("x = %d
", x);  // 출력: 2
    return 0;
}

🎯 이름이 겹치는 경우엔 가장 가까운 스코프의 변수가 사용됩니다!
이를 **”이름 숨김(Shadowing)”**이라고 불러요.


6. static 변수는 지역 + 정적

#include <stdio.h>

void counter() {
    static int count = 0;  // 함수 내부 static 변수
    count++;
    printf("count = %d
", count);
}

int main() {
    counter();  // 1
    counter();  // 2
    counter();  // 3
    return 0;
}
  • static 지역 변수는 함수가 종료돼도 값을 유지합니다.
  • 단, 스코프는 여전히 지역적이에요!

✅ 요약: 스코프 비교표

구분 선언 위치 접근 가능 범위 수명
전역 변수 함수 밖 모든 함수 프로그램 종료 시까지
지역 변수 함수 내부 해당 함수 내 함수 종료 시까지
블록 변수 블록 내부 해당 블록 내 블록 종료 시까지
static 지역 변수 함수 내부 + static 함수 내부 종료 후에도 값 유지

⚠️ 변수 스코프 사용 시 주의사항

주의사항 설명
동일한 이름 중첩 주의 의도치 않게 전역 변수가 가려질 수 있어요
지역 변수 초기화 필수 초기화 안 하면 쓰레기 값 포함될 수 있음
블록 바깥에서 블록 변수 접근 금지 컴파일 에러 발생
전역 변수 남용 금지 디버깅 어려움, 코드 복잡도 증가
static 변수는 기억됨 반복 호출 시 누적되는 특성 주의!

마무리하며 💬

변수의 스코프는 프로그래밍의 기본 중 기본이자 실수를 줄이기 위한 핵심 개념이에요!
특히 C 언어는 메모리와 스코프에 예민한 언어이기 때문에
이해가 깊어질수록 더 깔끔하고 효율적인 코드를 작성할 수 있습니다 😊

다음 시간에는 **상수(const)**를 배워서,
절대 변하지 않는 값들을 안전하게 다루는 방법을 익혀보도록 할게요.

그럼 오늘도 좋은 하루 보내시고,
다음 편에서 또 만나요! 감사합니다 💻✨

답글 남기기