새벽코딩

[Python] OOP-3 . instance variable vs class variable 본문

Programming/Python

[Python] OOP-3 . instance variable vs class variable

midnightcoder 2023. 1. 21. 06:47

1) Instance variable (인스턴스 변수)

class Car :
   name = ""
   speed = 0

위 class에 있는 변수 name과 speed는 인스턴스 변수이다.

인스턴스 변수는 인스턴스를 생성해야 사용할 수 있는 변수이다. (즉 아직 실제 공간이 할당되지 않음)

 

이제 이 설계도 (class)를 이요해 메인 코드 부분에서 자동차 (instance)를 만든다.

car1 = Car()
car2 = Car()

이제 car1과 car2 는 실제 존재한느 자동차이며, 이 안에는 color와 speed의 메모리에 공간이 만들어 졌다.

 

** 결론 : 인스턴스 변수는 메모리의 독립적인 공간을 가지고 있으며, 반드시 인스턴스를 생성해야지 사용할 수 있다.

 

 

2) class variable (클래스 변수)

- 클래스 변수는 클래스가 로딩될 때 이미 메모리 공간에 할당된 변수를 의미한다.

그래서 클래스 변수는 인스턴스에 별도의 공간을 할당하지 않고, 여러 인스턴스가 클래스 변수를 공유한다.

 

클래스변수에 접근할 때는 클래스명.클래스변수명 의 방식으로 접근해야한다.

또다른 예로, 포커 카드를 생각할 수 있는데,

52장의 카드에서, 카드의 폭과 넓이는 공통 변수인 class 변수가 되야한다.

 

예제 코드

class Car :
    # Car 클래스의 필드
    color = ""      # 인스턴스 변수
    speed = 0       # 인스턴스 변수
    count = 0       # 클래스 변수는 반드시 필드로 선언해줘야 한다.(중요)
    # 기본 생성자
    def __init__(self):
        self.color = "노랑"
        self.speed = 0
        Car.count += 1

위의 코드에서

처음에 변수를 선언하는 시점에서는 instance 변수인지 class 변수인지 구분할 수 가 없지만,

생성자에 마지막 line을 보면 Car.count 를 통해서, class 변수임을 알 수 있다. (인스턴스변수는 self. 를 붙임)

 

3) 요약

출처 : 파이썬(Python) 기초부터 실무까지 part.4