파이썬 클래스 변수와 인스턴스 변수: 차이점 및 활용 방법

클래스 변수란?

클래스 변수는 클래스 정의 내에 선언된 변수로, 해당 클래스로 생성된 모든 인스턴스가 공유합니다.
이러한 변수는 보통 클래스에 관련된 상수 값을 저장하거나 모든 인스턴스가 공유해야 하는 데이터를 저장하는 데 사용됩니다.
클래스 변수는 클래스의 네임스페이스에 존재하므로 인스턴스가 생성될 때마다 새로운 메모리를 할당받지 않습니다.
이는 메모리 사용을 줄이고 성능을 향상시키는 데 도움이 됩니다.

예제를 통해 살펴보면, 자동차 제조사의 총 생산량을 기록하는 변수를 클래스로 정의할 수 있습니다.

위의 예제에서 total_produced는 클래스 변수로, Car 클래스에서 만들어진 모든 인스턴스가 공유합니다.

인스턴스 변수란?

인스턴스 변수는 클래스의 각 인스턴스별로 개별적으로 유지되는 변수를 말합니다.
즉, 각각의 인스턴스는 독립적인 인스턴스 변수를 가집니다.
이러한 변수는 일반적으로 생성자 메서드( __init__ ) 내에서 self 키워드를 사용하여 선언됩니다.
인스턴스 변수는 객체의 상태를 저장하는 데 사용됩니다.

자동차의 각 모델명과 색상을 가지는 인스턴스 변수를 예로 들어보겠습니다.

이 경우 model과 color는 인스턴스 변수로, 각 자동차 인스턴스의 고유한 정보를 담고 있습니다.

클래스 변수와 인스턴스 변수의 차이점

클래스 변수는 모든 인스턴스에 공유되는 반면, 인스턴스 변수는 각 인스턴스별로 고유합니다.
클래스 변수는 클래스 레벨에서 변경이 가능하며, 모든 인스턴스에 영향을 미칩니다.
반면 인스턴스 변수는 특정 인스턴스의 상태를 나타내며, 각 인스턴스에서 독립적으로 변경할 수 있습니다.

공유 여부 모든 인스턴스에 공유됨 각 인스턴스에 독립적으로 존재
메모리 클래스 네임스페이스에 저장 인스턴스 네임스페이스에 저장

클래스 변수의 활용 사례

클래스 변수는 프로그램 전반에 걸쳐 동일한 상태를 유지해야 할 때 유용합니다.
주로 로깅, 데이터 공유, 환경 설정 등에서 볼 수 있습니다.
게임을 예로 들어, 모든 플레이어가 동일한 레벨을 공유한다면 클래스 변수를 사용할 수 있습니다.

인스턴스 변수의 활용 사례

인스턴스 변수는 객체의 고유한 데이터를 저장하고 관리하는 데 적합합니다.
예를 들어, 사용자 정보를 다룰 때 각각의 사용자 인스턴스마다 고유한 정보를 저장할 수 있습니다.
이를 통해 객체의 상태를 쉽게 관리할 수 있습니다.

클래스 변수와 인스턴스 변수를 함께 사용하는 방법

클래스 변수와 인스턴스 변수를 함께 사용하는 경우, 클래스 전체와 각 인스턴스의 개별적인 속성을 독립적으로
관리할 수 있어 더욱 다채로운 기능을 구현할 수 있습니다. 가령, 전체 학생의 평균 점수를 구하면서도 각
학생의 개별 점수를 관리할 수 있습니다.

이 예제에서는 total_score와 student_count는 클래스 변수이며, name과 score는 인스턴스 변수입니다.