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는 클래스 외부에 정의된 전역 변수입니다. 서로 다른 두 클래스 Ctest와 AnotherCtestClass가 모두 이 변수를 아무런 제약 없이 그대로 참조하고 있는 것을 확인할 수 있습니다.
실행 결과
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()위 예제에서 inVar는 Ctest 클래스의 access_method() 메서드 안에서 정의된 지역 변수입니다. 따라서 이 변수는 access_method()가 실행되는 동안에만 유효하며, AnotherCtest 클래스의 access_method()처럼 다른 메서드에서는 접근할 수 없습니다.
정리
- 클래스 외부 변수: 전역 범위(Scope)를 가지므로, 어떤 클래스나 메서드에서든 변수 이름만으로 자유롭게 접근할 수 있습니다.
- 메서드 내부 변수: 지역 범위(Local Scope)를 가지므로, 해당 변수가 정의된 메서드 안에서만 접근할 수 있습니다.
변수의 정의 위치에 따라 접근 가능 범위가 달라진다는 점을 이해하면, Python에서 클래스와 메서드를 설계할 때 변수의 스코프를 보다 명확하게 관리할 수 있습니다.