0Pricing
Python Academy · 강의

인스턴스 속성과 클래스 속성

객체별 데이터와 공유되는 클래스 수준 데이터를 구분합니다.

인스턴스 속성과 클래스 속성은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

소개

인스턴스 속성과 클래스 속성의 차이를 이해하면 미묘한 버그를 방지하고 효율적으로 공유 상태를 관리할 수 있습니다.

클래스 속성

class Dog: legs = 4 — legs는 모든 인스턴스가 공유합니다. Dog.legs 또는 dog.legs로 접근합니다.
class Dog:
    legs = 4
print(Dog.legs)
print(Dog().legs)

인스턴스 속성

__init__의 self.name = name은 인스턴스마다 따로 적용됩니다. 각 Dog는 고유한 이름을 가집니다.
class Dog:
    def __init__(self, name):
        self.name = name
d1 = Dog('Rex')
d2 = Dog('Buddy')
print(d1.name, d2.name)

속성 조회 순서

Python은 먼저 인스턴스 __dict__를 확인하고, 다음으로 클래스 __dict__, 그다음 부모 클래스를 확인합니다. 인스턴스 속성이 클래스 속성을 가립니다.
class C:
    x = 10
c = C()
c.x = 99  # instance shadows class attr
print(c.x)  # 99
print(C.x)  # 10

가변 클래스 속성의 함정

class C: items = [] — 모든 인스턴스가 같은 목록을 공유합니다. 한 인스턴스에서 추가하면 모두에게 영향을 줍니다!
class C:
    items = []
C.items.append(1)
print(C().items)  # [1] — shared!

가변 속성 함정 해결하기

초기화를 __init__으로 옮기세요: def __init__(self): self.items = [] 이렇게 하면 각 인스턴스가 고유한 목록을 가집니다.
class C:
    def __init__(self):
        self.items = []
c1 = C(); c2 = C()
c1.items.append(1)
print(c1.items, c2.items)

__dict__ 검사

obj.__dict__는 인스턴스 속성 딕셔너리입니다. Class.__dict__는 클래스 속성 딕셔너리입니다.
class Dog:
    legs = 4
    def __init__(self, name): self.name = name
d = Dog('Rex')
print(d.__dict__)
print(Dog.__dict__.keys())

팩토리로 사용하는 클래스 메서드

@classmethod는 self 대신 cls(클래스)를 받습니다. 대체 생성자로 사용할 수 있습니다.
class Date:
    def __init__(self, y, m, d): self.y,self.m,self.d=y,m,d
    @classmethod
    def from_string(cls, s):
        y,m,d=map(int,s.split('-'))
        return cls(y,m,d)
dt=Date.from_string('2024-01-15')
print(dt.y,dt.m,dt.d)

정적 메서드

@staticmethod에는 self나 cls가 없습니다. 인스턴스나 클래스가 필요하지 않지만 클래스와 논리적으로 관련된 유틸리티 함수에 사용합니다.
class MathUtils:
    @staticmethod
    def add(a, b): return a + b
print(MathUtils.add(3, 4))

클래스 속성으로 인스턴스 추적하기

클래스 속성을 카운터로 사용하면 생성된 인스턴스 수를 추적할 수 있습니다.
class Widget:
    count = 0
    def __init__(self):
        Widget.count += 1
Widget(); Widget(); Widget()
print(Widget.count)

hasattr() 및 vars()

hasattr(obj, 'name')은 속성이 존재하는지 확인합니다. vars(obj)는 obj.__dict__와 같습니다.
class P:
    def __init__(self, x): self.x = x
p = P(5)
print(hasattr(p, 'x'), hasattr(p, 'z'))
print(vars(p))

빠른 확인

인스턴스에서 가변 클래스 속성 목록에 추가하면 어떤 일이 발생하나요?

복습

클래스 속성은 공유되고 인스턴스 속성은 객체마다 따로 존재합니다. 인스턴스 조회가 클래스 속성을 가립니다. 가변 객체는 __init__에서 초기화하세요. 팩토리 메서드에는 @classmethod를 사용합니다.

계속 진행하기

훌륭합니다! 다음 레슨으로 계속 진행하여 실력을 더욱 키워 보세요.

자주 묻는 질문

“인스턴스 속성과 클래스 속성” 강의는 무료인가요?

네 — “인스턴스 속성과 클래스 속성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“인스턴스 속성과 클래스 속성”에서 뭘 배우나요?

객체별 데이터와 공유되는 클래스 수준 데이터를 구분합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“인스턴스 속성과 클래스 속성” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 클래스와 __init__ 메서드
  2. 인스턴스 속성과 클래스 속성
  3. 인스턴스 메서드와 self
  4. 매직 메서드: __str__ 및 __repr__
← Python Academy(으)로 돌아가기