About Python – “클래스(4) – 객체 변수 vs 클래스 변수”
About Python – “클래스(4) – 객체 변수 vs 클래스 변수”
파이썬의 객체 변수
객체 변수는 객체에 생성되는 객체만의 변수를 의미합니다.
class Example:
def __init__(self, hello):
self.hello = hello
x = Example(1)
y = Example(10)
print(x.hello)
x.hello = 100
print(x.hello)
print(y.hello)
# 1
# 100
# 10
위는 객체 변수의 예시입니다. x = Example(1)
이라는 코드로 x
라는 객체가 만들어지고, 그것의 객체변수 x.a
에 1
이라는 값이 대입이 됩니다.
아랫쪽에서도 동일한 방식으로 y
라는 객체를 만들고 그것의 객체변수에 10
이라는 값이 대입되었네요. 밑의 줄에서 x.hello = 100
이라는 코드로 객체 변수에 새로운 값을 바인딩해 주고, 각각의 객체변수 값을 다시 찍어 봅니다. x.a
는 성공적으로 100
이 나오는 반면, y.a
의 값은 변함이 없습니다.
예전에 클래스를 설명할 때에, 클래스는 종이학을 만들게 해 주기 위한 종이접기 책과 같은 것이라고 비유를 한 적이 있습니다. 이번엔 x
라는 종이학과 y
라는 종이학(객체)을 만들었네요. 종이학을 두 개 접고 나서 그것 중 하나를 구겨도 나머지 하나는 구겨지지 않습니다. 마찬가지로, 객체변수는 다른 객체변수가 어떻게 되던지 상관하지 않고 독립적인 값을 유지합니다.
파이썬의 클래스 변수
class Example:
b = 100
def __init__(self, hello):
self.hello = hello
x = Example(1)
y = Example(2)
print(Example.b)
print(x.b)
print(y.b)
Example.b = 1203
print(x.b)
print(y.b)
# 100
# 100
# 100
# 1203
# 1203
위의 클래스를 살펴보겠습니다. 클래스가 정의되고 그 안에 b = 100
이라는 코드로 클래스 변수를 정의했습니다. print(Example.b)
처럼 클래스이름.클래스변수
를 통하여 클래스 변수의 값을 출력하면 당연히 100
이 나옵니다.
역시나 x, y
모두 같은 클래스로부터 만들어진 객체이기 때문에 b
를 출력하면 같은 값이 나옵니다.
이번에는, Example.b = 1203
이라는 코드로 클래스 변수의 값을 바꾸고 각각 객체들의 b
값을 출력해 보겠습니다. 보시는 바와 같이 모두 1203
으로 변경된 것을 볼 수 있습니다. 클래스 변수는 클래스로 만들어진 객체들에 공유됩니다. 종이접기 책의 내용이 바뀌면( Example.b = 1203
) 그것으로 만들어진 종이학 (x, y
) 의 생김새도 변하는 것과 비슷합니다.