본문 바로가기

언어/Python

[ Python ] 클래스 변수와 인스턴스 변수에 대해서 알아보기

반응형

클래스와 인스턴스 변수는 Python에서 객체 지향 프로그래밍의 중요한 개념입니다. 두 개념 모두 클래스의 속성을 정의하지만, 그 역할과 사용 방법에는 차이가 있습니다.

클래스 변수 (Class Variable)

클래스 변수는 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스 간에 공유됩니다. 클래스 변수는 클래스 정의 내부에서, 메서드 밖에서 정의됩니다.

특징:

  • 모든 인스턴스가 동일한 클래스 변수를 공유합니다.
  • 클래스 이름을 통해 접근하거나, 인스턴스를 통해 접근할 수 있습니다.

예제:

class Dog:
    species = "Canis familiaris"  # 클래스 변수

    def __init__(self, name, age):
        self.name = name  # 인스턴스 변수
        self.age = age    # 인스턴스 변수

# 클래스 변수에 접근
print(Dog.species)  # 출력: Canis familiaris

# 인스턴스 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Milo", 5)

# 인스턴스를 통해 클래스 변수에 접근
print(dog1.species)  # 출력: Canis familiaris
print(dog2.species)  # 출력: Canis familiaris

# 클래스 변수를 변경하면 모든 인스턴스에 영향을 미침
Dog.species = "Canis lupus"
print(dog1.species)  # 출력: Canis lupus
print(dog2.species)  # 출력: Canis lupus

인스턴스 변수 (Instance Variable)

인스턴스 변수는 각 인스턴스에 속하는 변수로, 인스턴스마다 별도의 값을 가집니다. 인스턴스 변수는 __init__ 메서드(혹은 다른 메서드) 내에서 self를 통해 정의됩니다.

특징:

  • 인스턴스마다 고유한 값을 가집니다.
  • 인스턴스 이름을 통해 접근해야 합니다.

예제:

class Dog:
    species = "Canis familiaris"  # 클래스 변수

    def __init__(self, name, age):
        self.name = name  # 인스턴스 변수
        self.age = age    # 인스턴스 변수

# 인스턴스 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Milo", 5)

# 인스턴스 변수에 접근
print(dog1.name)  # 출력: Buddy
print(dog2.name)  # 출력: Milo

# 인스턴스 변수는 각 인스턴스마다 다르게 설정 가능
dog1.age = 4
print(dog1.age)  # 출력: 4
print(dog2.age)  # 출력: 5

주요 차이점 요약

  • 클래스 변수는 클래스와 모든 인스턴스에서 공유되며, 클래스 이름을 통해 접근할 수 있습니다.
  • 인스턴스 변수는 특정 인스턴스에만 속하며, 인스턴스가 생성될 때마다 별도로 할당됩니다. 이 변수는 인스턴스 이름을 통해 접근합니다.

추가 예제

클래스와 인스턴스 변수를 사용하여 클래스를 정의하는 예를 더 살펴보겠습니다:

class Car:
    # 클래스 변수
    wheels = 4

    def __init__(self, make, model):
        # 인스턴스 변수
        self.make = make
        self.model = model

# 인스턴스 생성
car1 = Car("Toyota", "Corolla")
car2 = Car("Honda", "Civic")

# 클래스 변수에 접근
print(car1.wheels)  # 출력: 4
print(car2.wheels)  # 출력: 4

# 인스턴스 변수에 접근
print(car1.make)    # 출력: Toyota
print(car2.model)   # 출력: Civic

# 클래스 변수 변경 (모든 인스턴스에 영향)
Car.wheels = 6
print(car1.wheels)  # 출력: 6
print(car2.wheels)  # 출력: 6

# 인스턴스 변수 변경 (해당 인스턴스에만 영향)
car1.make = "Ford"
print(car1.make)    # 출력: Ford
print(car2.make)    # 출력: Honda

이 예제에서 Car 클래스는 wheels라는 클래스 변수를 가지고 있으며, 각 인스턴스는 makemodel이라는 인스턴스 변수를 가집니다. 클래스 변수는 모든 인스턴스에서 동일하게 공유되지만, 인스턴스 변수는 각 인스턴스마다 다르게 설정됩니다.

반응형