[Python] 변수의 유효 범위(variable scope)

2022. 6. 25. 04:19·Language/Python
728x90

변수의 유효 범위(variable scope)

파이썬에서는 변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위까지 달라지며, 이것을 변수의 유효 범위(variable scope)라고 부른다.

예를 들어, 함수 내부에서 선언된 변수는 해당 함수 내부에서만 사용할 수 있으며, 함수 밖에서는 사용할 수 없다.

 

파이썬에서 변수는 유효 범위에 따라 다음과 같이 나눌 수 있다.

  • 지역 변수(local variable)
  • 전역 변수(global variable)

지역 변수(local variable)

파이썬에서 지역 변수(local variable)란 함수 내에서 선언된 변수를 의미한다.

이렇게 함수 내에서 선언된 지역 변수는 일반적으로 함수 내에서만 사용할 수 있다.

def func():
    local_var = "지역 변수"
    print(local_var)


func()
# print(local_var)
실행 결과
지역 변수

위의 예제에서는 func() 함수 내부에서 local_var이라는 이름의 지역 변수를 선언하고 사용하고 있다.

하지만 7번 라인의 주석 처리를 해제하고 함수 밖에서 함수 내에 선언된 지역 변수에 접근하려고 하면 NameError가 발생하는 것을 확인할 수 있다.

함수 내부에서 선언된 지역 변수는 함수의 호출이 끝남과 동시에 소멸되므로, 함수 밖에서 접근하려고 하면 선언되지 않은 변수에 접근하는 것으로 인식하여 오류가 발생하는 것이다. 함수의 매개변수 또한 함수 내부에서 정의되는 지역 변수로 취급된다.


전역 변수(global variable)

파이썬에서 전역 변수(global variable)란 함수 외부에서 선언된 변수를 의미한다.

이렇게 함수 외부에서 선언된 전역 변수는 함수 외부에서는 당연히 접근할 수 있으며, 모든 함수에서 global 키워드로 재선언하면 접근할 수 있게 된다.

def func():
    global global_var
    local_var = "지역 변수"
    print(local_var)
    print(global_var)


global_var = "전역 변수"
func()
print(global_var)
실행결과
지역 변수
전역 변수
전역 변수

위 예제의 5번 라인처럼 함수 내부에서 전역 변수를 사용하기 위해서는 반드시 2번 라인처럼 global 키워드를 사용하여 해당 전역 변수를 재선언해야 한다.

 

만약 함수 외부에서 선언된 전역 변수와 함수 내부에서 선언된 지역 변수의 이름이 같은 경우에는 다음 예제와 같이 global 키워드를 사용하지 않으면 전혀 별개의 변수로 취급되므로 주의해야 한다.

def func():
    var = "지역 변수"
    print(var)


var = "전역 변수"
print(var)
func()
print(var)
실행 결과
전역 변수
지역 변수
전역 변수

위 예제의 2번 라인은 전역 변수 var에 대입 연산을 하는 것이 아니라 새로운 지역 변수인 var를 선언하는 것으로 인식된다. 따라서 9번 라인에서 전역 변수 var의 값이 변하지 않았음을 확인할 수 있다.

 

다음 예제의 3번 라인처럼 global 키워드를 사용해야만 지역 변수의 선언이 아닌 전역 변수의 값을 변경하는 구문으로 제대로 동작할 수 있다.

def func():
    global var
    var = "지역 변수"
    print(var)


var = "전역 변수"
print(var)
func()
print(var)
실행 결과
전역 변수
지역 변수
지역 변수

10번 라인에서 전역 변수 var의 출력 결과가 “전역 변수”에서 “지역 변수”로 변경된 것을 확인할 수 있다.

※ 위의 예제처럼 전역 변수의 값을 함수 내부에서 변경하는 것은 그리 좋은 방법이 아닙니다. 이러한 행위는 해당 전역 변수를 사용하는 다른 함수의 동작을 의도치 않게 바꾸는 결과를 초래할 수 있으므로, 변수의 유효 범위를 이해하는 용도로만 사용하시길 바란다.

지역 변수 vs 전역 변수

그렇다면 변수를 선언할 때 지역 변수와 전역 변수 중 어떤 변수로 선언해야 좋을지 고민될 수 있다.

둘 중 어떤 변수를 사용하는 것이 더 좋다고 딱 잘라 말할 수는 없으며, 해당 변수가 사용되는 목적에 따라 구분해서 사용할 필요가 있다.

즉, 프로그램이 실행되는 내내 변하지 않아야 하거나 여러 함수에서 함께 사용하는 값들은 전역 변수로 선언하는 것이 좋으며, 특정 함수에서만 사용되는 값들은 지역 변수로 선언하는 것이 좋다.

 

'Language > Python' 카테고리의 다른 글

[Python] 클래스의 활용  (0) 2022.06.25
[Python] 클래스와 객체  (0) 2022.06.25
[Python] 함수(function), 매개변수  (0) 2022.06.25
[Python] 함수(function)  (0) 2022.06.25
[Python] 딕셔너리(dictionary) 타입  (0) 2022.06.25
'Language/Python' 카테고리의 다른 글
  • [Python] 클래스의 활용
  • [Python] 클래스와 객체
  • [Python] 함수(function), 매개변수
  • [Python] 함수(function)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CSS
    next.js
    Python
    HTML
    MySQL
    JavaScript
    array
    변수
    객체
    파이썬
    TypeScript
    자바스크립트
    react
    event
    제어문
    web
    리액트
    Java
    타입스크립트
    object
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Python] 변수의 유효 범위(variable scope)
상단으로

티스토리툴바