파이썬에서 클래스 변수와 인스턴스 변수의 차이점
파이썬에서 클래스 변수와 인스턴스 변수는 변수의 소유 범위와 생애가 다릅니다. 이를 이해하기 위해 간단한 예시와 함께 설명해 드리겠습니다.
1. 클래스 변수
- 클래스 변수는 클래스 자체에 속하며, 모든 인스턴스가 공유하는 변수입니다.
- 클래스가 정의될 때 선언되며, 모든 인스턴스에서 같은 값을 참조합니다.
- 클래스를 통해 직접 접근하거나 인스턴스를 통해 접근할 수 있지만, 값을 변경하면 모든 인스턴스에서 영향을 받습니다.
2. 인스턴스 변수
- 인스턴스 변수는 각 인스턴스에 속하며, 인스턴스가 생성될 때마다 독립적으로 만들어집니다.
- 따라서 한 인스턴스에서 인스턴스 변수의 값을 변경해도 다른 인스턴스에 영향을 주지 않습니다.
예제 코드
아래의 `Person` 클래스 예제를 통해 클래스 변수와 인스턴스 변수를 구분해 보겠습니다.
```python
class Person:
클래스 변수 (모든 인스턴스가 공유)
species = "Homo sapiens"
def __init__(self, name, age):
인스턴스 변수 (각 인스턴스마다 독립적으로 존재)
self.name = name
self.age = age
인스턴스 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
클래스 변수 접근
print(person1.species) 출력: Homo sapiens
print(person2.species) 출력: Homo sapiens
인스턴스 변수 접근
print(person1.name) 출력: Alice
print(person2.name) 출력: Bob
클래스 변수 수정 (모든 인스턴스에 영향)
Person.species = "Human"
print(person1.species) 출력: Human
print(person2.species) 출력: Human
인스턴스 변수 수정 (다른 인스턴스에는 영향 없음)
person1.name = "Charlie"
print(person1.name) 출력: Charlie
print(person2.name) 출력: Bob
```
설명
- `species`는 클래스 변수로, `Person` 클래스에 속해 있고 모든 인스턴스가 이를 공유합니다. `Person.species`를 변경하면 모든 인스턴스의 `species`가 변경됩니다.
- `name`과 `age`는 인스턴스 변수로, 각 인스턴스마다 별도로 존재합니다. `person1.name`을 변경해도 `person2.name`에는 영향을 미치지 않습니다.
이렇게 클래스 변수와 인스턴스 변수는 사용 목적에 따라 다르게 사용하며, 클래스 변수는 공통적으로 공유되는 데이터, 인스턴스 변수는 각 객체마다 독립적인 데이터를 저장할 때 사용합니다.