Python to AI

클래스, 클래스 변수, 인스턴스 변수

최 수빈 2025. 2. 5. 14:12

 

클래스(Class) 

 

 

객체를 생성하기 위한 툴(설계도)

 

  • class 키워드를 사용하여 클래스를 정의
  • 클래스 이름은 보통 PascalCase로 작성
  • Python3에서는 object를 명시하지 않아도 자동으로 모든 클래스가 object를 상속받음
class Cat(object): # 명시적으로 object를 상속
	pass
    
class Cat: # python 3의 object 상속
	pass

 

 

*PascalCase vs. 다른 표기법들

표기법 설명 예제
PascalCase 각 단어의 첫 글자를 대문자로 표기 MyClass, UserProfile
camelCase 첫 단어는 소문자, 이후 단어는 대문자로 시작 myClass, userProfile
snake_case 모든 단어를 소문자로 표기하고 _로 구분 my_class, user_profile
kebab-case 모든 단어를 소문자로 표기하고 -로 구분 my-class, user-profile

 

 

 

클래스 변수와 인스턴스 변수

 

 

클래스 변수

 

클래스 자체에 정의된 변수

 

 

  • 모든 인스턴스가 공유함
  • ClassName.변수명 형태로 접근 가능
  • 어떤 객체에서도 동일한 값 유지
class Cat:
    legs = 4 # 클래스 변수 (모든 고양이가 공유)
    
print(Cat.legs) # 4 (클래스를 통해 직접 접근 가능)

 

  • 클래스 변수를 인스턴스에서 접근할 수도 있음
a = Cat()
b = Cat()
print(a.legs) # 4
print(b.legs) # 4

 

  • 클래스 변수를 변경하면 모든 인스턴스에 영향
Cat.legs = 3
print(a.legs) # 3
print(b.legs) # 3

 

  • 인스턴스에서 직접 변경하면, 새로운 인스턴스 변수로 저장됨
a.legs = 2 # a 인스턴스에서만 변경
print(a.legs) # 2 (인스턴스 변수로 재정의)
print(b.legs) # 3 (클래스 변수는 그대로)

 

 

인스턴스 변수

객체(인스턴스)마다 개별적으로 저장되는 변수

 

 

  • self.변수명 형태로 선언하고, __init__생성자에서 정의
  • 각 객체(인스턴스)마다 다른 값을 가질 수 있음
class Cat:
    def __init__(self, name, age):
        self.name = name # 인스턴스 변수
        self.age = age # 인스턴스 변수
        
# 인스턴스 생성
a = Cat("Cookie", 3)
b = Cat("Eve", 1)


print(a.name, a.age) # Cookie 3
print(b.name, b.age) # Eve 1

 

각 객체마다 name, age값이 다름 → self.name, self.age는 인스턴스 변수이기 때문

 

 

 

  클래스 변수 인스턴스 변수
정의 위치 클래스 내부, __init__바깥 __init__내부에서 self.변수명으로 정의
저장 위치 클래스 자체에 저장 개별 객체(인스턴스) 내부에 저장
공유 여부 모든 인스턴스가 공유 각 인스턴스마다 고유한 값
접근 방법 ClassName.변수명 또는 self.변수명  self.변수명
변경 시 영향 범위 모든 인스턴스에 적용 해당 인스턴스에만 적용