파이썬 전역 변수, 지역 변수, 클래스 변수 - 변수 Scope 알아보기

728x90

 

파이썬에서 변수가 사용 가능한 범위(Scope)는 코드의 구조와 변수 선언 위치에 따라 결정된다.

이를 이해하는 것은 변수의 접근성과 수명을 효과적으로 관리하는 데 중요하다.

본 글에서는 전역 변수, 지역 변수, 클래스 변수의 정의와 사용법, 그리고 각 변수 유형의 활용 사례를 설명한다.


1. 전역 변수(Global Variable)

정의

전역 변수는 함수나 클래스의 내부가 아닌 모듈의 최상위 레벨에서 선언된 변수로, 코드 전체에서 접근 가능하다.

전역 변수는 프로그램의 전체 실행 시간 동안 존재한다.

특징

  • 모든 함수와 클래스에서 접근 가능하다.
  • global 키워드를 사용하여 함수 내부에서 수정할 수 있다.

사용 예제

x = 10  # 전역 변수

def modify_global():
    global x
    x += 5
    print(f"전역 변수 수정 후: {x}")

print(f"초기 전역 변수: {x}")
modify_global()
print(f"최종 전역 변수: {x}")

장단점

  • 장점: 여러 함수나 클래스에서 공유해야 하는 값을 저장하기 적합하다.
  • 단점: 코드의 복잡성을 증가시키고, 디버깅이 어려워질 수 있다.

2. 지역 변수(Local Variable)

정의

지역 변수는 함수나 메서드 내부에서 선언된 변수로, 해당 함수가 실행되는 동안에만 유효하다.

함수가 종료되면 지역 변수는 사라진다.

특징

  • 선언된 함수 외부에서는 접근할 수 없다.
  • 메모리 사용이 효율적이다.

사용 예제

def local_example():
    y = 20  # 지역 변수
    print(f"지역 변수: {y}")

local_example()
# print(y)  # 오류 발생: y는 함수 외부에서 접근 불가

장단점

  • 장점: 함수 내부에서만 사용되므로 다른 함수와의 충돌이 없다.
  • 단점: 값을 함수 외부에서 유지할 수 없다.

3. 클래스 변수(Class Variable)

정의

클래스 변수는 클래스 전체에서 공유되는 변수로,

클래스 정의 내부에 선언되며 모든 인스턴스에서 접근 가능하다.

특징

  • 클래스의 모든 인스턴스가 동일한 값을 공유한다.
  • 클래스 이름을 통해 직접 접근하거나 인스턴스를 통해 접근할 수 있다.

사용 예제

class Example:
    class_variable = "공유 변수"  # 클래스 변수

    def __init__(self, value):
        self.instance_variable = value  # 인스턴스 변수

print(Example.class_variable)  # 클래스 이름으로 접근
obj1 = Example("값1")
obj2 = Example("값2")

print(obj1.class_variable)  # 인스턴스를 통해 접근
print(obj2.class_variable)

Example.class_variable = "변경된 공유 변수"
print(obj1.class_variable)  # 변경된 값 확인

장단점

  • 장점: 클래스 내 모든 인스턴스에서 공유해야 하는 값을 저장하기 적합하다.
  • 단점: 클래스 변수 값을 변경하면 모든 인스턴스에 영향을 미친다.

4. 변수 Scope의 우선순위

파이썬에서는 변수를 참조할 때 다음과 같은 우선순위 규칙이 적용된다:

  1. 지역 변수(Local): 가장 먼저 참조.
  2. 함수 내 nonlocal 변수: 함수 중첩 구조에서 가장 가까운 외부 함수 변수.
  3. 전역 변수(Global): 모듈 수준에서 선언된 변수.
  4. 내장 변수(Built-in): 파이썬의 기본 제공 함수나 변수.

예제

x = "전역 변수"

def outer_function():
    x = "외부 함수 변수"

    def inner_function():
        nonlocal x
        x = "내부 함수에서 수정된 외부 변수"
        print(x)

    inner_function()
    print(x)

outer_function()
print(x)

5. 변수 Scope 관리 시 고려사항

  1. 캡슐화: 전역 변수 사용을 최소화하고, 함수나 클래스 내부에서만 변수의 사용을 제한한다.
  2. 명확한 변수명: 변수 이름을 직관적으로 작성하여 코드 가독성을 높인다.
  3. 메모리 관리: 지역 변수를 사용하여 불필요한 메모리 사용을 방지한다.
  4. 클래스 변수 사용: 클래스 변수는 공유 데이터가 필요한 경우에만 사용하고, 인스턴스 변수와 혼동하지 않도록 주의한다.

결론

파이썬에서 변수 Scope를 이해하면 코드의 가독성과 유지보수성을 크게 향상시킬 수 있다.

전역 변수, 지역 변수, 클래스 변수를 적절히 사용하여 코드의 복잡성을 줄이고, 명확하고 효율적인 프로그램을 작성하자.

728x90