Menu
Coddy logo textTech

인스턴스 변수 vs 클래스 변수

Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 13번째.

인스턴스 변수는 각 객체에 고유하며, 클래스 변수는 동일한 클래스의 모든 객체에 의해 공유됩니다.

두 가지 유형의 변수를 모두 포함하는 클래스의 예입니다.

class Student:
    # 클래스 변수 - 모든 인스턴스가 공유함
    school = "Python High School"
    
    def __init__(self, name, grade):
        # 인스턴스 변수 - 각 학생마다 고유함
        self.name = name
        self.grade = grade

학생 객체를 생성합니다:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

인스턴스 변수(각 객체에 고유함)에 접근하기:

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

클래스 변수(모든 객체가 공유함)에 접근하기:

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

이제 클래스 변수를 변경해 보겠습니다:

Student.school = "Python Academy"

변경 사항이 모든 인스턴스에 어떤 영향을 미치는지 확인해 보세요:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

출력:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

객체 생성 후에도 인스턴스 변수를 생성할 수 있습니다:

alice.age = 16  # 인스턴스 변수를 생성합니다
print(alice.age)  # 16
# print(bob.age)  # 에러가 발생합니다 - bob에게는 age가 없습니다

주요 차이점: 인스턴스 변수(self.variable_name으로 생성됨)는 각 객체마다 고유하며, 반면 클래스 변수(클래스 내에서 직접 정의됨)는 모든 객체에 의해 공유됩니다. 클래스 변수를 변경하면 모든 인스턴스에 영향을 미칩니다.

challenge icon

챌린지

쉬움

뱅킹 시스템을 완성하세요. 한 파일에서 BankAccount 클래스를 정의하고 다른 파일에서 이를 사용하게 됩니다.

다음 파일들을 작업하게 됩니다:

  • bank_account.py: 속성과 메서드를 가진 BankAccount 클래스를 정의합니다.
  • driver.py: 클래스를 임포트하고, 계좌를 생성하며, 클래스 변수를 시연합니다.

단계별 지침을 위해 두 파일에 있는 TODO 주석을 따르세요. 주석은 적절한 변수와 메서드를 사용하여 클래스를 생성하고, 클래스 변수가 모든 인스턴스에 어떻게 영향을 미치는지 보여주는 과정을 안내할 것입니다.

치트 시트

인스턴스 변수는 각 객체마다 고유하며, 클래스 변수는 동일한 클래스의 모든 객체에 의해 공유됩니다.

두 가지 변수 유형을 모두 가진 클래스:

class Student:
    # 클래스 변수 - 모든 인스턴스에 의해 공유됨
    school = "Python High School"
    
    def __init__(self, name, grade):
        # 인스턴스 변수 - 각 학생마다 고유함
        self.name = name
        self.grade = grade

인스턴스 변수 액세스 (각 객체마다 고유):

alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name)  # Alice
print(bob.name)    # Bob

클래스 변수 액세스 (모든 객체에 의해 공유):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

클래스 변수를 변경하면 모든 인스턴스에 영향을 미칩니다:

Student.school = "Python Academy"
print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

객체 생성 후 인스턴스 변수 생성:

alice.age = 16  # 이것은 인스턴스 변수를 생성합니다
print(alice.age)  # 16

직접 해보기

# TODO: bank_account.py에서 BankAccount 클래스를 가져오세요.
from bank_account import BankAccount

# TODO: 다음 세부 정보로 두 개의 계좌를 생성하세요:
# - account1: 소유자 "Alice Smith", 잔액 $1000
# - account2: 소유자 "Bob Jones", 잔액 $2000

# TODO: 두 계좌 모두에 대해 display_info()를 호출하세요.

# TODO: 클래스 변수 interest_rate를 0.03 (3%)으로 변경하세요.
# 다음 형식을 사용하세요: BankAccount.interest_rate = 0.03

# TODO: "After interest rate change:"라는 텍스트를 출력하세요.

# TODO: 두 계좌 모두에 대해 display_info()를 다시 호출하여 두 계좌 모두 새로운 이자율이 적용되었음을 확인하세요.
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Object Oriented Programming의 모든 레슨