[파이썬] 클래스 변수와 인스턴스 변수의 차이

Python은 객체 지향 프로그래밍 언어로, 클래스와 인스턴스를 사용하여 객체를 만들고 관리할 수 있습니다. 클래스 변수와 인스턴스 변수는 둘 다 객체의 상태를 저장하기 위해 사용되지만, 그들 간에는 몇 가지 중요한 차이점이 있습니다.

클래스 변수 (Class Variables)

클래스 변수는 클래스 정의 내에 선언되며, 클래스에 의해 생성된 모든 인스턴스에 의해 공유됩니다. 클래스 변수는 클래스의 모든 인스턴스 간에 동일한 값을 가지며, 해당 클래스의 모든 메소드에서 접근할 수 있습니다.

클래스 변수는 일반적으로 클래스의 속성이나 클래스 자체와 관련된 정보를 저장하는 데 사용됩니다. 예를 들어, 다음은 “Person” 클래스에서 “count”라는 클래스 변수를 사용하여 생성된 인스턴스의 수를 추적하는 예입니다:

class Person:
    count = 0

    def __init__(self, name):
        self.name = name
        Person.count += 1

    def display_count(self):
        print("Total persons:", Person.count)

person1 = Person("John")
person2 = Person("Jane")
person1.display_count()  # 출력: Total persons: 2

위 코드에서 “count” 변수는 “Person” 클래스의 모든 인스턴스에 의해 공유되기 때문에 “person1.display_count()”와 같은 호출을 통해 클래스 메소드 안에서 접근 가능합니다.

인스턴스 변수 (Instance Variables)

인스턴스 변수는 클래스의 개별 인스턴스에 속하는 변수입니다. 각 인스턴스는 독립적으로 자체의 인스턴스 변수를 가지며, 값을 공유하지 않습니다. 인스턴스 변수는 보통 개별 객체의 특정 상태를 저장하기 위해 사용됩니다.

다음은 “Person” 클래스에서 “name”이라는 인스턴스 변수를 사용하여 개별 인스턴스의 이름을 저장하는 예입니다:

class Person:
    def __init__(self, name):
        self.name = name

    def display_name(self):
        print("Name:", self.name)

person1 = Person("John")
person2 = Person("Jane")
person1.display_name()  # 출력: Name: John
person2.display_name()  # 출력: Name: Jane

위 예시에서 “name” 변수는 “Person” 클래스의 각 인스턴스에 속하며, 다른 인스턴스들과 독립적입니다. 따라서 “person1.display_name()”과 “person2.display_name()” 호출은 각각의 인스턴스 변수를 출력합니다.

결론

클래스 변수와 인스턴스 변수는 객체 지향 프로그래밍에서 중요한 개념입니다. 클래스 변수는 클래스의 모든 인스턴스 간에 공유되며, 클래스의 속성이나 클래스 자체와 관련된 정보를 저장하기 위해 사용됩니다. 반면에, 인스턴스 변수는 개별 인스턴스의 상태를 저장하기 위해 사용되며, 각 인스턴스에 의해 독립적으로 소유됩니다.

클래스 변수와 인스턴스 변수를 올바르게 사용하면 객체 지향 프로그램을 더 효율적으로 작성할 수 있습니다. 따라서, 클래스와 인스턴스를 사용하여 객체를 구현하는 시나리오에서 이러한 차이점을 이해하고 활용하는 것이 중요합니다.