클래스 변수란?
클래스를 생성하면 인스턴스를 손쉽게 만들어낼 수 있다. Car이라는 클래스를 만들면 car1, car2, car3, ... 손쉽게 자동차 객체를 찍어낼 수가 있다. car1, car2, car3 같은 인스턴스는 각각 자신의 인스턴스 상태값을 가지지만 어떤 값을 동시에 공유하고 있지는 못하고 있다.
만약 모든 인스턴스가 공유해야 하는 데이터가 있다면 어떻게 해야 할까? 아니면 클래스로 객체가 몇 개 생성되었는지 알고 싶은 경우는? 이런 경우에는 객체와는 상관 없이 사용할 수 있는 변수가 필요하다. 다행히 파이썬에서는 객체를 통하지 않고도 사용할 수 있는 변수를 생성할 수 있는데 이 변수를 클래스 변수(class variable)라고 한다. 클래스 변수는 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스가 공유하는 속성이다.
클래스 변수 정의하기
클래스 변수는 클래스 내부에 직접 정의하며, 일반적으로 __init__ 메서드 외부에, 다른 메서드들과 동일한 수준에 위치한다.
class Car:
wheels = 4 # 클래스 변수
def __init__(self, brand, model):
self.brand = brand # 인스턴스 변수
self.model = model # 인스턴스 변수
클래스 변수를 사용하려면 클래스이름.변수명의 형태로 클래스 변수에 접근할 수 있다. (사실 클래스 변수는 인스턴스를 통해서도 접근할 수 있기는 하지만 클래스 이름을 사용하는 것이 명확하고 안전하다. 인스턴스 변수로 접근한 클래스 변수는 수정 시 의도치 않게 새로운 인스턴스 변수를 생성하게 되기 때문이다.)
# 클래스 변수에 접근
print(Car.wheels) # 4
# 인스턴스 생성
car1 = Car("현대", "소나타")
car2 = Car("기아", "K5")
# 클래스 변수 공유 확인
print(car1.wheels) # 4
print(car2.wheels) # 4
클래스 변수 vs 인스턴스 변수
클래스의 변수는 인스턴스 변수와 클래스 변수로 나누어진다. 클래스 변수는 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스가 공유하는 속성이다. 반면에, 인스턴스 변수는 각 인스턴스마다 별도로 존재하는 변수로, 인스턴스마다 다른 값을 가질 수 있다.
차이점을 표로 정리해 보면 다음과 같이 정리해 볼 수 있다:
특징 | 클래스 변수 (Class Variable) | 인스턴스 변수 (Instance Variable) |
소속 | 클래스 자체 | 클래스의 인스턴스 |
공유 여부 | 모든 인스턴스가 공유 | 각 인스턴스마다 별도로 존재 |
접근 방법 | 클래스명.변수명 또는 인스턴스.변수명 | 인스턴스.변수명 |
메모리 사용 효율성 | 효율적 (공유되므로 메모리 절약) | 비효율적 (각 인스턴스마다 별도 메모리) |
정리
파이썬에서 클래스 변수는 클래스 자체에 속하고, 모든 인스턴스가 같은 속성을 공유할 수 있도록 도와준다. 클래스 변수를 잘 활용하면 메모리를 효율적으로 사용하고, 코드를 더 간단하게 만들며, 객체의 상태를 쉽게 추적할 수 있는 등 여러 가지 장점을 누릴 수 있다. 하지만 클래스 변수를 사용할 때는 값을 변경하면 모든 인스턴스에 영향을 줄 수 있고, 클래스 변수와 인스턴스 변수를 혼동하지 않도록 주의해야 한다는 점에 유의하자.
'Language > Python' 카테고리의 다른 글
[Python] 파이썬에서 자주 사용하는 내장 함수 정리 (1) | 2025.01.23 |
---|---|
[Python] 파이썬 연산자 오버로딩 이해하기 (0) | 2025.01.22 |
[Python] 파이썬 정보 은닉 개념 이해하기 (0) | 2025.01.21 |
[Python] 파이썬 클래스와 생성자 사용하여 객체 생성하기 (0) | 2025.01.21 |
[Python] 객체지향 프로그래밍(OOP) 이해하기 (1) | 2025.01.20 |