파이썬

파이썬에서 클래스 변수와 인스턴스 변수의 차이점

Ed2024 2024. 10. 29. 23:49

파이썬에서 클래스 변수와 인스턴스 변수는 변수의 소유 범위와 생애가 다릅니다. 이를 이해하기 위해 간단한 예시와 함께 설명해 드리겠습니다.

 

 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`에는 영향을 미치지 않습니다.

 

이렇게 클래스 변수와 인스턴스 변수는 사용 목적에 따라 다르게 사용하며, 클래스 변수는 공통적으로 공유되는 데이터, 인스턴스 변수는 각 객체마다 독립적인 데이터를 저장할 때 사용합니다.