<개인공부>/[Python]

[Python] 파이썬 클래스 변수 vs 인스턴스 변수 차이

BlockDMask 2025. 4. 3. 12:08
반응형

안녕하세요. BlockDMask 입니다.

오늘은 파이썬 클래스에서 자주 혼동되는 클래스 변수(class variable)인스턴스 변수(instance variable)의 차이점에 대해 알아보겠습니다.

두 개념은 비슷해 보이지만 동작 방식이 다르기 때문에,
특히 초보자일수록 실수하기 쉬운 부분입니다.
실제 예제와 함께 명확히 비교해보겠습니다.



1. 인스턴스 변수란?

  • 객체(인스턴스)가 생성될 때마다 따로 생성되는 변수입니다.
  • 보통 self.변수명 형태로 선언합니다.
class User:
    def __init__(self, name):
        self.name = name  # 인스턴스 변수

u1 = User("BlockDMask")
u2 = User("Alice")

print(u1.name)  # BlockDMask
print(u2.name)  # Alice

각 인스턴스마다 별도로 존재합니다.



2. 클래스 변수란?

  • 클래스 자체에 귀속되는 변수입니다.
  • 모든 인스턴스가 같은 값을 공유합니다.
class User:
    count = 0  # 클래스 변수

    def __init__(self, name):
        self.name = name
        User.count += 1

print(User.count)  # 0

u1 = User("BlockDMask")
print(User.count)  # 1

u2 = User("Alice")
print(User.count)  # 2

count는 클래스 변수로, 클래스 자체에 속합니다.



3. 클래스 변수와 인스턴스 변수를 동시에 써보자

class Dog:
    species = "강아지"  # 클래스 변수

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

d1 = Dog("초코")
d2 = Dog("바둑이")

print(d1.name, d1.species)  # 초코 강아지
print(d2.name, d2.species)  # 바둑이 강아지

name은 각 개가 다르게 갖고, species는 공통 속성입니다.



4. 클래스 변수는 모든 인스턴스에 영향을 줌

Dog.species = "개과동물"

print(d1.species)  # 개과동물
print(d2.species)  # 개과동물

클래스 변수를 바꾸면 모든 인스턴스에서 바뀐 값이 반영됩니다.



5. 인스턴스에서 클래스 변수를 변경하면?

d1.species = "늑대"

print(d1.species)   # 늑대
print(d2.species)   # 개과동물
print(Dog.species)  # 개과동물

여기서 d1.species = "늑대"는 클래스 변수를 변경한 게 아니라,
d1이라는 인스턴스에 새로운 인스턴스 변수를 하나 만든 것입니다.

즉, 클래스 변수와 이름이 같아도 인스턴스에서 따로 덮어쓸 수 있습니다.



6. 정리표

항목 클래스 변수 인스턴스 변수
선언 위치 클래스 내부, 메서드 밖 보통 __init__ 안
소속 클래스 자체 각 인스턴스
접근 방식 클래스명.변수명 또는 인스턴스명.변수명 인스턴스명.변수명
공유 여부 모든 인스턴스가 공유 인스턴스마다 독립적



7. 결론

  • 클래스 변수는 클래스 전체가 공유하는 값입니다.
  • 인스턴스 변수는 각 객체마다 다른 값을 가집니다.
  • 인스턴스에서 클래스 변수와 같은 이름을 쓰면 덮어쓰기 효과가 나므로 주의해야 합니다.



이상, 파이썬 클래스 변수 vs 인스턴스 변수의 차이점에 대해 정리해보았습니다.
오늘도 읽어주셔서 감사합니다.

반응형