Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 클래스와 메서드 내·외부 변수 접근 방법 완벽 가이드

Python은 대표적인 객체 지향 프로그래밍(OOP) 언어입니다. Python에서는 거의 모든 것이 객체(Object)로 취급되며, 각 객체는 고유한 속성(Properties)과 메서드(Methods)를 가집니다. 그리고 클래스(Class)는 객체를 생성하기 위한 설계도, 즉 "청사진(Blueprint)" 역할을 합니다.

이 글에서는 변수를 클래스 외부에 정의했을 때와 메서드 내부에 정의했을 때 각각 어떻게 접근할 수 있는지 예제 코드와 함께 자세히 알아보겠습니다.

1. 클래스 외부에서 정의된 변수

클래스 밖에서 정의된 변수는 별도의 선언이나 import 과정 없이, 단순히 변수 이름만 작성하면 어떤 클래스에서든, 또는 그 클래스의 어떤 메서드 안에서든 자유롭게 접근할 수 있습니다.

예제 코드

# 클래스 외부에 정의된 변수
outVar = 'outside_class'
print("Outside_class1", outVar)

'''클래스 1'''
class Ctest:
    print("Outside_class2", outVar)
    def access_method(self):
        print("Outside_class3", outVar)

# 객체를 생성하여 메서드 호출
uac = Ctest()
uac.access_method()

'''클래스 2'''
class AnotherCtestClass:
    print("Outside_class4", outVar)
    def another_access_method(self):
        print("Outside_class5", outVar)

# 객체를 생성하여 메서드 호출
uaac = AnotherCtestClass()
uaac.another_access_method()

위 예제에서 outVar는 클래스 외부에 정의된 전역 변수입니다. 서로 다른 두 클래스 CtestAnotherCtestClass가 모두 이 변수를 아무런 제약 없이 그대로 참조하고 있는 것을 확인할 수 있습니다.

실행 결과

Outside_class1 outside_class
Outside_class2 outside_class
Outside_class3 outside_class
Outside_class4 outside_class
Outside_class5 outside_class

2. 메서드 내부에서 정의된 변수

반면, 메서드 안에서 정의된 변수는 해당 메서드 내부에서만 접근할 수 있습니다. 같은 클래스의 다른 메서드나, 다른 클래스의 메서드에서는 이 변수를 사용할 수 없습니다.

예제 코드

# 메서드 내부에 정의된 변수

'''클래스 1'''
class Ctest:
    print()
    def access_method(self):
        # 메서드 내부에 정의된 변수
        inVar = 'inside_method'
        print("Inside_method3", inVar)

uac = Ctest()
uac.access_method()

'''클래스 2'''
class AnotherCtest:
    print()
    def access_method(self):
        print()

uaac = AnotherCtest()
uaac.access_method()

위 예제에서 inVarCtest 클래스의 access_method() 메서드 안에서 정의된 지역 변수입니다. 따라서 이 변수는 access_method()가 실행되는 동안에만 유효하며, AnotherCtest 클래스의 access_method()처럼 다른 메서드에서는 접근할 수 없습니다.

정리

  • 클래스 외부 변수: 전역 범위(Scope)를 가지므로, 어떤 클래스나 메서드에서든 변수 이름만으로 자유롭게 접근할 수 있습니다.
  • 메서드 내부 변수: 지역 범위(Local Scope)를 가지므로, 해당 변수가 정의된 메서드 안에서만 접근할 수 있습니다.

변수의 정의 위치에 따라 접근 가능 범위가 달라진다는 점을 이해하면, Python에서 클래스와 메서드를 설계할 때 변수의 스코프를 보다 명확하게 관리할 수 있습니다.