파이썬의 객체지향 프로그래밍에서 가장 중요한 개념 중 하나는 클래스 변수와 인스턴스 변수의 차이를 정확히 이해하는 것입니다. 두 변수 모두 클래스 내부에 정의되지만, 저장 위치와 공유 범위가 다르기 때문에 코드에 미치는 영향이 큽니다.
● 인스턴스 변수란?
인스턴스 변수는 객체(instance)가 생성될 때마다 각각의 인스턴스에 독립적으로 존재하는 변수입니다. 일반적으로 생성자 메서드인 __init__
안에서 self.변수명
형태로 선언됩니다.
class Dog:
def __init__(self, name):
self.name = name # 인스턴스 변수
위 코드에서 self.name은 인스턴스마다 다른 값을 가질 수 있습니다. 예를 들어, a = Dog("Max")와 b = Dog("Buddy")처럼 서로 다른 객체를 만들면, 각각 name이라는 독립적인 변수를 가지게 됩니다.
● 클래스 변수란?
클래스 변수는 클래스 자체에 속한 변수이며, 모든 인스턴스가 이를 공유합니다. 클래스 변수는 클래스명.변수명
혹은 클래스 내부에서 직접 정의되며, 일반적으로 클래스 블록 안에서 self
없이 정의됩니다.
class Dog:
species = "Canine" # 클래스 변수
def __init__(self, name):
self.name = name
모든 Dog 객체는 species라는 동일한 값을 공유합니다. 만약 a.species 또는 b.species처럼 접근하면 모두 "Canine"이라는 값을 반환합니다. 하지만 특정 인스턴스에서 species를 수정하면 그 인스턴스에 한해서 shadowing이 발생합니다.
● 차이점 요약
- 인스턴스 변수는 객체마다 별도로 생성되며,
self.변수명
형식으로 정의 - 클래스 변수는 클래스 자체에 속하고, 모든 인스턴스가 공유
- 인스턴스 변수는 객체의 개별 상태 저장에 적합
- 클래스 변수는 전체 객체에서 공통되는 데이터를 저장할 때 유용
● 마무리
클래스 변수와 인스턴스 변수의 개념을 명확히 이해하는 것은 객체지향 프로그래밍을 다룰 때 매우 중요합니다. 실수로 클래스 변수를 인스턴스 변수처럼 잘못 사용하거나, 반대로 인스턴스 변수를 공유하려 할 때 예기치 못한 버그가 발생할 수 있으므로 반드시 그 차이를 인지하고 있어야 합니다.
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter06. 사용자 정의 예외 클래스 (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter05. 매직 메서드(__str__, __eq__, __lt__ 등) (0) | 2025.05.18 |
[파이썬][중급] Chapter04. 다중 상속과 MRO 이해 (0) | 2025.05.18 |
[파이썬][중급] Chapter03. 추상 클래스와 ABC 모듈 (0) | 2025.05.18 |
[파이썬][중급] Chapter02. @property와 getter/setter 사용법 (0) | 2025.05.18 |