본문 바로가기
카테고리 없음

Python 클래스 변수 vs 인스턴스 변수: 깊이 이해하기 🐍✨

by IT트레이서 2024. 4. 2.

Python 클래스 변수 vs 인스턴스 변수: 깊이 이해하기 🐍✨

안녕하세요! 오늘은 Python에서 클래스 변수와 인스턴스 변수에 접근하고, 이들을 변경하는 방법에 대해 깊이 탐구해보고자 합니다. 클래스 변수와 인스턴스 변수는 Python 프로그래밍의 근본적인 개념 중 하나입니다. 그러나 이 둘 사이의 차이와 각각의 사용법을 혼동하기 쉽습니다. 여러분과 이 지식을 공유하며, 보다 명확한 이해를 돕기 위해 구체적인 코드 예시와 함께 설명드리겠습니다! 🌟

클래스 변수란? 🤔

클래스 변수는 클래스 정의 내에서 선언되며, 그 클래스로 생성된 모든 객체에 의해 공유됩니다. 클래스 변수의 가장 큰 특징은 한 곳에서 변경할 경우, 그 변경사항이 클래스의 모든 인스턴스에 반영된다는 점입니다.

인스턴스 변수란? 🤔

반면, 인스턴스 변수는 클래스 내의 메서드에서 self 키워드를 사용하여 선언됩니다. 이 변수들은 각 객체의 고유한 데이터를 저장하며, 각 인스턴스마다 별도로 유지됩니다.

클래스 변수와 인스턴스 변수의 상호작용 🔄

클래스 변수에 접근하고 변경하는 것은 직관적인데, 여기에는 흥미로운 동작의 차이가 있습니다. 객체를 통해 클래스 변수에 접근하여 값을 "읽는" 것은 가능하지만, 객체를 통해 값을 "변경"할 때는 그 객체에 새로운 인스턴스 변수가 생성됩니다. 이는 종종 혼란을 야기할 수 있습니다.

아래의 코드 예시를 통해 이 개념을 더 깊이 이해해 보겠습니다:

class MyClass:
    class_var = 0

# 클래스 변수를 클래스 이름으로 접근하여 변경
MyClass.class_var = 1

# 클래스 변수를 객체를 통해 접근하여 읽기
obj1 = MyClass()
obj2 = MyClass()
print(f"obj1.class_var (after class change via class name): {obj1.class_var}")
print(f"obj2.class_var (after class change via class name): {obj2.class_var}")

# 객체를 통해 클래스 변수 변경
obj1.class_var = 2
print(f"obj1.class_var (after change via obj1): {obj1.class_var}")
print(f"obj2.class_var (after change via obj1): {obj2.class_var}")
print(f"MyClass.class_var (global class var after obj1 change): {MyClass.class_var}")

# 클래스 변수를 다시 클래스 이름으로 변경
MyClass.class_var = 3
print(f"obj1.class_var (after class change via class name): {obj1.class_var}")
print(f"obj2.class_var (after class change via class name): {obj2.class_var}")
print(f"MyClass.class_var (global class var after class name change): {MyClass.class_var}")

이 코드에서 볼 수 있듯, obj1을 통해 클래스 변수에 값을 할당하면, obj1에만 새로운 인스턴스 변수가 생성되며, 다른 객체나 클래스 자체의 변수에는 영향을 미치지 않습니다. 이는 Python에서 객체와 클래스 간의 상호 작용을 이해하는 데 중요한 포인트입니다. 🎯

결론

Python에서 클래스 변수와 인스턴스 변수를 사용하고 이해하는 것은 객체 지향 프로그래밍의 핵심입니다. 이번 글을 통해 여러분이 이 두 변수 유형 사이의 차이점을 명확히 이해하고, 실제 프로그래밍 상황에서 올바르게 적용할 수있기를 바랍니다. 특히, 객체를 통해 클래스 변수를 변경할 때의 세심한 차이점을 기억하는 것이 중요합니다. 이는 여러분이 더욱 견고하고 예측 가능한 코드를 작성하는 데 도움이 될 것입니다. 🛠️💡

감사합니다. 🎉💻