변수 스코프 - 지역 변수와 전역 변수의 탐색 순서

코딩C언어JavaPython
읽는데 6분 소요
처음 쓰여진 날: 2026-03-13
마지막 수정일: 2026-03-13
조회수: 3

요약

변수 스코프(Scope)의 개념과 이름 탐색 순서를 알아봅니다. 함수 안에서 변수를 사용하면 지역 → 전역 순서로 찾는 규칙, 섀도잉(Shadowing), 전역 변수가 사용되는 조건을 정보처리기사 실기 기출문제와 함께 정리합니다.

변수 스코프 핵심 정리

개념설명
스코프(Scope)변수에 접근할 수 있는 유효 범위
지역 변수함수 안에서 선언, 함수 종료 시 소멸
전역 변수함수 바깥에서 선언, 프로그램 종료 시 소멸
이름 탐색 순서지역 스코프 → 전역 스코프 순서로 탐색
섀도잉(Shadowing)지역 변수가 같은 이름의 전역 변수를 가림

스코프란?

스코프(Scope) 란 변수가 유효한 범위입니다. 같은 이름의 변수라도 선언된 위치에 따라 접근 가능 여부가 달라집니다.

c
코드 하이라이팅 중...
java
코드 하이라이팅 중...
python
코드 하이라이팅 중...
  • 전역 변수 x는 어디서든 접근 가능
  • 지역 변수 y는 선언된 함수 안에서만 접근 가능

이름 탐색 순서 (핵심)

함수 안에서 변수 이름을 사용하면, 컴파일러(또는 인터프리터)는 안쪽 스코프부터 바깥쪽으로 탐색합니다.

C언어: 지역 → 전역

c
코드 하이라이팅 중...

func 안에서 n을 사용했지만 지역 변수 n이 없으므로, 전역에서 선언된 int n = 100을 찾아 사용합니다.

Java: 지역 → 인스턴스/클래스 변수

java
코드 하이라이팅 중...

Python: LEGB 규칙

Python은 4단계로 탐색합니다.

순서스코프설명
1Local현재 함수 안
2Enclosing감싸는 함수 (중첩 함수)
3Global모듈(파일) 전체
4Built-in내장 이름 (print, len 등)
python
코드 하이라이팅 중...

섀도잉 (Shadowing)

지역 변수가 전역 변수와 같은 이름으로 선언되면, 함수 안에서는 지역 변수가 우선합니다. 전역 변수는 가려져서 접근할 수 없습니다. 이것을 섀도잉(Shadowing) 이라고 합니다.

c
코드 하이라이팅 중...
  • func 안의 x는 지역 변수 → 전역 x와 별개
  • func에서 x를 99로 설정해도 전역 x(10)는 변하지 않음
java
코드 하이라이팅 중...
python
코드 하이라이팅 중...

섀도잉 vs 전역 변수 직접 사용

두 경우를 비교하면 이름 탐색 순서가 명확해집니다.

상황코드n은?
지역 변수 있음 (섀도잉)void func() { int n = 5; printf("%d", n); }지역 변수 5
지역 변수 없음void func() { printf("%d", n); }전역 변수
상황코드n은?
지역 변수 있음 (섀도잉)static void func() { int n = 5; System.out.println(n); }지역 변수 5
지역 변수 없음static void func() { System.out.println(n); }클래스 변수
상황코드n은?
지역 변수 있음 (섀도잉)def func(): n = 5; print(n)지역 변수 5
지역 변수 없음def func(): print(n)전역 변수


전역 변수 공유의 함정

함수 안에 지역 변수가 없어서 전역 변수를 사용하는 경우, 여러 함수가 같은 전역 변수를 공유하게 됩니다. 한 함수에서 값을 바꾸면 다른 함수에서도 바뀐 값이 보입니다.

c
코드 하이라이팅 중...

add 함수 안에 count라는 지역 변수가 없으므로 전역 count를 직접 수정합니다. 호출할 때마다 값이 누적됩니다.

이것이 바로 23년 2회 실기 기출에서 출제된 핵심 개념입니다. gamja() 함수 안에 배열 n이 선언되어 있지 않아서 전역 배열 n을 사용하게 되고, 호출할 때마다 같은 배열을 덮어쓰게 됩니다.

java
코드 하이라이팅 중...
python
코드 하이라이팅 중...

관련 개념

  • 메모리 구조 - 전역 변수는 데이터 영역, 지역 변수는 스택에 저장
  • static 변수 - 전역 변수처럼 값이 유지되지만 접근 범위는 함수 내부로 제한

정보처리기사 실기 대비 문제