반응형
안녕하세요. 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 인스턴스 변수의 차이점에 대해 정리해보았습니다.
오늘도 읽어주셔서 감사합니다.
반응형
'<개인공부> > [Python]' 카테고리의 다른 글
[Python] 파이썬 클래스 초보자 가이드 (__init__, self) (1) | 2025.04.01 |
---|---|
[Python] 파이썬에서 날짜 다루기 (datetime 기본부터 실전까지) (0) | 2025.03.31 |
[Python] 파이썬 리스트 컴프리헨션 vs for문 (0) | 2025.03.29 |
[Python] 파이썬 *args와 **kwargs 알아보기 (0) | 2025.03.27 |
[Python] 파이썬에서 파일 경로 다루기 (`os` vs `pathlib`) (0) | 2025.03.25 |
[Python] 파이썬 zip() 함수 활용법 (0) | 2025.03.23 |
[Python] 파이썬 딕셔너리에서 get() vs [] 차이점 (0) | 2025.03.19 |
[Python] 파이썬 with open() 을 써야하는 이유 (0) | 2025.03.08 |