programming language/Python

Python - Class 변수 및 인스턴스

E.W.I 2023. 7. 21. 20:33
반응형

Python에서 Class 변수 및 인스턴스에 관하여

 

Class는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다.

 

클래스(Class)

객체의 속성과 행동들을 정의하는 템플릿 역할을 합니다.

 

인스턴스(instance)

메모리 상에 생성된 클래스의 구현체입니다.

 

클래스 내에서 선언한 변수들은 클래스 변수 및 인스턴스 변수가 있습니다.

 

Class 변수는 해당 Class 내에서 모든 인스턴스가 공유하는 변수입니다. 이 변수는 모든 인스턴스에서 동일한 값을 가질 수 있습니다. Class 변수는 Class 정의 내부에서 선언되며, 인스턴스의 생성과 무관하게 접근할 수 있습니다.

__init__()으로 생성되는 변수가 아닙니다.

 

Class변수는 모든 인스턴스에서 동일한 값을 가지고 모든 인스턴스에서 공유됩니다. 클래스 정의 내에서 동일한 이름으로 접근이 가능합니다. 클래스 변수는 인스턴스를 생성하지 않아도 접근이 가능하고 Class namespace에 저장됩니다.

 

인스턴스 변수는 각각의 인스턴스에 속한 변수입니다. 각 인스턴스는 서로 다른 값을 가질 수 있습니다. 인스턴스 변수는 Class 정의 내부에서 선언된 메서드에서 self.라는 방식으로 접근하고, 인스턴스 생성한 후에도 사용할 수 있습니다.

 

class Employee:
    # 클래스 변수
    number_of_employees = 0
    company = "EWI blog"

    def __init__(self, name, position, salary):
        # 인스턴스 변수
        self.name = name
        self.position = position
        self.salary = salary
        Employee.number_of_employees += 1
    
    def display_employee_info(self):
        print("Name: ", self.name)
        print("Position: ", self.position)
        print("Salary: ", self.salary)

# 인스턴스 생성
employee1 = Employee("Choi", "engineer", 80000)
employee2 = Employee("Shin", "senior engineer", 60000)

# 인스턴스 메서드 호출
print("\nEmployee Information:")
employee1.display_employee_info()
employee2.display_employee_info()

print("\nNumber of employees:", Employee.number_of_employees)
print("Company name:", Employee.company)

 

위의 코드에서 Employee 클래스는 number_of_employees와 company라는 클래스 변수를 가지고 있습니다.

모든 인스턴스가 공유하는 값입니다.

 

클래스 변수는 클래스 영역에서 선언되기 때문에 인스턴스의 생성과는 무관하게 정해진 초기값으로 할당됩니다. 이 클래스 변수들은 클래스 자체의 이름을 사용해 접근할 수 있습니다.

Class 변수 활용

 

이와 같이 사용이 가능합니다.

 

def __init__() 메서드는 인스턴스 생성자로, 인스턴스가 생성될 때마다 호출됩니다.

init에서 인스턴스 변수들을 초기하고 클래스 변수 number_of_employees를 1씩 증가시킵니다.

 

def display_employee_info 메서드는 인스턴스들의 정보들을 출력하는 인스턴스 메서드입니다. 인스턴스 메서드 안에서는 인스턴스 변수와 클래스 변수 모두 접근할 수 있습니다. 인스턴스 변수에 접근하기 위해 self.name과 같이 self. 키워드를 사용해야 합니다. 클래스 변수에 접근하기 위해서는 클래스 이름과 함께 해당 변수명을 사용합니다.

 

코드 실행 결과