class Factory:
num = 0 # 클래스 변수
def increaseClassNum(self):
Factory.num += 1 # 클래스를 이용한 변수 접근
def increaseInstanceNum(self):
self.num += 1 # 인스턴스 변수
클래스 변수는 Class 선언시 바로 아래 self.~ 형태가 아닌 변수,
인스턴스 변수는 self.~ 형태의 변수라고 생각하면 된다.
클래스 변수와 인스턴스 변수는 몇 가지 특징이 있다.
1. 클래스 변수는 모든 인스턴스가 공유할 수 있다.
2. 인스턴스에서 인스턴스 변수를 클래스 변수와 동일한 이름으로 선언할 경우, 인스턴스에서 변수 호출시 클래스 변수가 아닌 인스턴스 변수를 호출하게 된다.
좀 더 상세히 알기 위한 여러 케이스에 대한 시나리오이다.
id 가 같으면 동일함을 의미합니다.
시나리오에 대한 코드와 각 출력값을 기록했습니다.
# 1. Factory 인스턴스 A 생성
A = Factory()
# 2. A 의 increaseClassNum() 수행
A.increaseClassNum()
print(id(A.num) == id(Factory.num)) # True
print(A.num) # 1
print(Factory.num) # 1
# 3. Factory 클래스를 통해 직접적으로 num 을 3으로 수정
Factory.num = 3
print(A.num) # 3
print(Factory.num) # 3
# 4. Factory 인스턴스 B 생성
B = Factory()
print(id(A.num) == id(B.num)) # True
print(B.num) # 3
print(Factory.num) # 3
# 5. B 의 increaseClassNum() 수행
B.increaseClassNum()
print(id(A.num) == id(B.num)) # True
print(A.num) # 4
print(B.num) # 4
print(Factory.num) # 4
# 6. B 의 increaseInstanceNum() 수행
B.increaseInstanceNum()
print(id(A.num) == id(B.num)) # False
print(id(A.num) == id(Factory.num)) # True
print(id(B.num) == id(Factory.num)) # False
print(A.num) # 4
print(B.num) # 5
print(Factory.num) # 4