Life Work

[파이썬] 인스턴스 변수 vs 클래스 변수

white stones 2024. 6. 28. 15:00

파이썬에서 클래스 변수와 인스턴스 변수는 각각 클래스와 인스턴스에 속하는 변수로, 그 사용 목적과 접근 방법에서 차이가 있습니다. 아래는 두 변수의 주요 차이점입니다.

1. 클래스 변수 (Class Variable)

  • 선언 위치: 클래스 정의 내부, 메서드 외부
  • 소속: 클래스 자체에 속함
  • 공유 범위: 클래스의 모든 인스턴스가 공유
  • 생명 주기: 프로그램이 종료될 때까지 유지
  • 접근 방법: 클래스명 또는 인스턴스를 통해 접근 가능
  • 용도: 클래스 전체에서 공통으로 사용되는 데이터를 저장

 

class MyClass:
    class_variable = 0  # 클래스 변수

    def __init__(self, value):
        self.instance_variable = value  # 인스턴스 변수
        MyClass.class_variable += 1

# 클래스 변수에 접근
print(MyClass.class_variable)  # 0 출력

# 인스턴스 생성
obj1 = MyClass(10)
obj2 = MyClass(20)

# 클래스 변수와 인스턴스 변수에 접근
print(obj1.instance_variable)  # 10 출력
print(obj2.instance_variable)  # 20 출력
print(MyClass.class_variable)  # 2 출력 (인스턴스가 두 개 생성되었기 때문)

 

2. 인스턴스 변수 (Instance Variable)

  • 선언 위치: 클래스 메서드 내부, 주로 __init__ 메서드 내
  • 소속: 각 인스턴스에 속함
  • 공유 범위: 각 인스턴스마다 별도로 존재
  • 생명 주기: 인스턴스가 존재하는 동안 유지
  • 접근 방법: 인스턴스를 통해 접근 가능
  • 용도: 각 인스턴스별로 고유한 데이터를 저장
class MyClass:
    class_variable = 0  # 클래스 변수

    def __init__(self, value):
        self.instance_variable = value  # 인스턴스 변수

# 인스턴스 생성
obj1 = MyClass(10)
obj2 = MyClass(20)

# 인스턴스 변수에 접근
print(obj1.instance_variable)  # 10 출력
print(obj2.instance_variable)  # 20 출력

# 클래스 변수에 접근
print(MyClass.class_variable)  # 0 출력 (클래스 변수는 변경되지 않음)

 

3. 주요 차이점 요약

  1. 소속:
    • 클래스 변수: 클래스 자체에 속함
    • 인스턴스 변수: 각 인스턴스에 속함
  2. 공유 범위:
    • 클래스 변수: 클래스의 모든 인스턴스가 공유
    • 인스턴스 변수: 각 인스턴스마다 별도로 존재
  3. 선언 위치:
    • 클래스 변수: 클래스 정의 내부, 메서드 외부
    • 인스턴스 변수: 클래스 메서드 내부, 주로 __init__ 메서드 내
  4. 접근 방법:
    • 클래스 변수: 클래스명 또는 인스턴스를 통해 접근 가능
    • 인스턴스 변수: 인스턴스를 통해 접근 가능
  5. 생명 주기:
    • 클래스 변수: 프로그램이 종료될 때까지 유지
    • 인스턴스 변수: 인스턴스가 존재하는 동안 유지