날짜: 2024-11-30
파이썬에서 객체지향 프로그래밍(OOP)을 사용하다 보면, 클래스 속성과 인스턴스 속성을 올바르게 이해하고 관리하는 것이 중요합니다. 이 글에서는 클래스 속성과 인스턴스 속성의 차이를 간단히 살펴보고, 잘못된 속성 관리로 인해 발생할 수 있는 오류와 이를 방지하는 방법을 소개합니다.
예제:
class MyClass:
class_attribute = "This is a class attribute"
# 클래스 속성에 접근
print(MyClass.class_attribute) # 출력: This is a class attribute
# 인스턴스를 통해 클래스 속성 접근
instance = MyClass()
print(instance.class_attribute) # 출력: This is a class attribute
__init__
메서드에서 설정됩니다.예제:
class MyClass:
def __init__(self, value):
self.instance_attribute = value
# 서로 다른 인스턴스 속성
instance1 = MyClass("Instance 1 value")
instance2 = MyClass("Instance 2 value")
print(instance1.instance_attribute) # 출력: Instance 1 value
print(instance2.instance_attribute) # 출력: Instance 2 value
클래스 속성과 인스턴스 속성을 혼동하면, 의도하지 않게 모든 인스턴스가 같은 값을 공유할 수 있습니다.
예제: 잘못된 속성 관리
class MyClass:
shared_list = [] # 클래스 속성
instance1 = MyClass()
instance2 = MyClass()
# 한 인스턴스에서 수정
instance1.shared_list.append("Value")
# 모든 인스턴스에 영향을 미침
print(instance2.shared_list) # 출력: ['Value']
문제:
shared_list
는 클래스 속성이므로 모든 인스턴스가 이를 공유합니다.클래스 속성은 변경되지 않는 공용 데이터에만 사용하고, 인스턴스별 데이터를 저장하려면 인스턴스 속성을 사용하세요.
수정된 코드:
class MyClass:
def __init__(self):
self.unique_list = [] # 인스턴스 속성
instance1 = MyClass()
instance2 = MyClass()
# 한 인스턴스에서 수정
instance1.unique_list.append("Value")
# 다른 인스턴스에는 영향을 미치지 않음
print(instance2.unique_list) # 출력: []
DEFAULT_SETTINGS
, MAX_LIMIT
.self.name
, self.age
.클래스명.속성명
과 self.속성명
의 사용 방식을 일관되게 유지하세요.예제:
class MyClass:
class_attribute = "Shared"
def __init__(self, value):
self.instance_attribute = value
# 클래스 속성을 수정
MyClass.class_attribute = "Modified Shared"
클래스 속성과 인스턴스 속성의 차이를 이해하고, 이를 적절히 관리하면 코드의 가독성과 안정성을 높일 수 있습니다. 특히, 잘못된 속성 관리로 인한 공유 데이터 문제를 예방하기 위해 클래스 속성과 인스턴스 속성을 명확히 구분하는 습관을 가지세요.