# 클래스 변수와 인스턴스 변수 ## 클래스 변수 (Class Variable) 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스가 공유하는 값을 가집니다. 즉, 클래스가 메모리에 로딩될 때 단 한 번 생성되며, 모든 인스턴스가 동일한 클래스 변수를 참조합니다. 클래스에 속한 모든 객체가 공통적으로 사용하는 값을 저장할 때 사용합니다. 예를 들어, 모든 학생 객체가 속한 학교 이름과 같은 정보를 저장할 수 있습니다. 클래스 내부에서 일반 변수처럼 선언하지만, 주로 클래스 이름과 함께 사용합니다. ```python class Student: school_name = "BIT" # 클래스 변수 def __init__(self, name, age): self.name = name # 인스턴스 변수 self.age = age # 인스턴스 변수 ``` ## 인스턴스 변수 (Instance Variable) 각 인스턴스(객체)마다 고유하게 가지는 변수입니다. 즉, 각 인스턴스는 자신만의 인스턴스 변수를 가지고 있으며, 다른 인스턴스의 인스턴스 변수 값에 영향을 받지 않습니다. 각 객체의 고유한 상태를 나타내는 값을 저장할 때 사용합니다. 예를 들어, 각 학생의 이름과 나이를 저장할 수 있습니다. 생성자 `__init__` 메소드 내에서 `self.변수명` 형태로 선언합니다. ```python class Car: # 클래스 변수: 모든 자동차의 바퀴 개수 wheels = 4 def __init__(self, color, max_speed): # 인스턴스 변수: 각 자동차의 고유한 속성 self.color = color self.max_speed = max_speed car1 = Car("빨간색", 200) car2 = Car("파란색", 180) print(car1.wheels) # 4 (모든 자동차의 바퀴 개수는 4) print(car2.color) # 파란색 ``` ## 접근제한자 파이썬은 다른 언어들처럼 엄격한 접근 제한자(public, private, protected)를 제공하지 않습니다. 하지만 파이썬은 언더바(`_`)를 사용하여 변수나 메서드의 접근성을 제한하는 관습을 가지고 있습니다. 이러한 관습을 통해 정보 은닉을 구현하고, 객체 지향 프로그래밍의 중요한 원칙인 캡슐화를 실현할 수 있습니다. * public: 변수나 메서드 이름 앞에 아무런 언더바도 붙이지 않습니다. 어디에서든 자유롭게 접근할 수 있습니다. * protected: 변수나 메서드 이름 앞에 하나의 언더바(`_`)를 붙입니다. 같은 패키지 내의 클래스나 자식 클래스에서 접근할 수 있습니다. * private: 변수나 메서드 이름 앞에 두 개의 언더바(`__`)를 붙입니다. 클래스 내부에서만 접근할 수 있으며, 외부에서는 `_클래스명.__변수명`과 같은 형식으로 접근할 수 있지만 권장하지 않습니다.