2.8 KiB
2.8 KiB
클래스 변수와 인스턴스 변수
클래스 변수 (Class Variable)
클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스가 공유하는 값을 가집니다. 즉, 클래스가 메모리에 로딩될 때 단 한 번 생성되며, 모든 인스턴스가 동일한 클래스 변수를 참조합니다.
클래스에 속한 모든 객체가 공통적으로 사용하는 값을 저장할 때 사용합니다. 예를 들어, 모든 학생 객체가 속한 학교 이름과 같은 정보를 저장할 수 있습니다.
클래스 내부에서 일반 변수처럼 선언하지만, 주로 클래스 이름과 함께 사용합니다.
class Student:
school_name = "BIT" # 클래스 변수
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
인스턴스 변수 (Instance Variable)
각 인스턴스(객체)마다 고유하게 가지는 변수입니다. 즉, 각 인스턴스는 자신만의 인스턴스 변수를 가지고 있으며, 다른 인스턴스의 인스턴스 변수 값에 영향을 받지 않습니다.
각 객체의 고유한 상태를 나타내는 값을 저장할 때 사용합니다. 예를 들어, 각 학생의 이름과 나이를 저장할 수 있습니다.
생성자 __init__ 메소드 내에서 self.변수명 형태로 선언합니다.
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: 변수나 메서드 이름 앞에 두 개의 언더바(
__)를 붙입니다. 클래스 내부에서만 접근할 수 있으며, 외부에서는_클래스명.__변수명과 같은 형식으로 접근할 수 있지만 권장하지 않습니다.