정처기 감자
공통 기초프로그래밍 기초

검색

검색어를 입력해 개념과 문제를 찾습니다.

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

코딩C언어JavaPython
읽는데 7분 소요
처음 쓰여진 날: 2026-03-13
마지막 수정일: 2026-03-21
조회수: —
선수학습(1개)
  • 변수 선언 방법

요약

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

변수 스코프 핵심 정리

개념설명예시
스코프(Scope)변수에 접근할 수 있는 유효 범위함수 안 / 함수 바깥
지역 변수함수 안에서 선언, 함수 종료 시 메모리에서 사라짐void func() { int x = 5; }
전역 변수함수 바깥에서 선언, 프로그램 종료 시 메모리에서 사라짐int x = 10; (함수 밖)
이름 탐색 순서지역 스코프 → 전역 스코프 순서로 탐색지역에 x가 없으면 전역 x 사용
섀도잉(Shadowing)지역 변수가 같은 이름의 전역 변수를 가림전역 x = 10, 지역 x = 99 → 99

스코프란? 쌩기초

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

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

이름 탐색 순서 (핵심) 기초

함수 안에서 변수 이름을 사용하면, 프로그램을 실행하는 도구 1가 안쪽 스코프부터 바깥쪽으로 탐색합니다.

C언어: 지역 → 전역

c
코드 하이라이팅 중…

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

기출 포인트: 함수 안에서 전역 변수를 사용하는 경우
함수 안에 해당 이름의 지역 변수가 없으면, 전역 변수를 그대로 사용합니다. 이때 전역 변수를 수정하면 다른 함수에서도 변경된 값이 보입니다. 23년 2회 실기에서 이 개념이 출제되었습니다.

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

java
코드 하이라이팅 중…

Python: LEGB 규칙

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

순서스코프뜻설명
1Local지역현재 함수 안에서 선언된 변수
2Enclosing감싸는 함수함수 안에 함수가 있을 때, 바깥쪽 함수의 변수
3Global전역파일 전체에서 접근 가능한 변수
4Built-in내장Python이 기본 제공하는 이름 (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회 실기에서 출제되었습니다. 해당 문제에서는 특정 함수 안에 배열이 선언되어 있지 않아서, 전역에 선언된 배열을 그대로 사용하게 됩니다. 함수를 여러 번 호출하면 매번 같은 전역 배열을 덮어쓰기 때문에, 이전 호출의 결과가 다음 호출에 영향을 줍니다.

java
코드 하이라이팅 중…

Python에서는 함수 안에서 전역 변수의 값을 바꾸려면 global 키워드를 먼저 선언해야 합니다. 선언하지 않으면 같은 이름의 새로운 지역 변수가 만들어집니다.

python
코드 하이라이팅 중…
Python의 global 키워드
Python에서는 함수 안에서 전역 변수에 값을 대입하려면 global 키워드를 선언해야 합니다. 선언 없이 대입하면 새로운 지역 변수가 생깁니다.

관련 개념

스코프를 이해했다면, 다음 개념도 함께 알아두면 시험에 도움이 됩니다.

  • 변수 선언 - 변수의 기본 선언 방법과 초기화
  • 메모리 구조 - 전역 변수는 데이터 영역, 지역 변수는 스택에 저장
  • static 키워드 - C는 값 유지, Java는 클래스 소속 — 공통점과 차이점 비교
  • Call by Value - 함수에 값을 전달할 때 지역 변수가 새로 만들어지는 원리

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


Footnotes

  1. C언어에서는 컴파일러, Python에서는 인터프리터라고 합니다. 코드를 기계가 이해할 수 있는 형태로 바꿔주는 도구입니다. ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(4개)
  • 매개변수 전달 방식 (Call by Value)
  • static 키워드 - C언어와 Java 비교
  • 메모리 구조 (스택, 힙, 데이터 영역)
  • C언어 static 변수 - 값이 유지되는 변수
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999