반응형
클래스와 인스턴스 변수는 Python에서 객체 지향 프로그래밍의 중요한 개념입니다. 두 개념 모두 클래스의 속성을 정의하지만, 그 역할과 사용 방법에는 차이가 있습니다.
클래스 변수 (Class Variable)
클래스 변수는 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스 간에 공유됩니다. 클래스 변수는 클래스 정의 내부에서, 메서드 밖에서 정의됩니다.
특징:
- 모든 인스턴스가 동일한 클래스 변수를 공유합니다.
- 클래스 이름을 통해 접근하거나, 인스턴스를 통해 접근할 수 있습니다.
예제:
class Dog:
species = "Canis familiaris" # 클래스 변수
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
# 클래스 변수에 접근
print(Dog.species) # 출력: Canis familiaris
# 인스턴스 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Milo", 5)
# 인스턴스를 통해 클래스 변수에 접근
print(dog1.species) # 출력: Canis familiaris
print(dog2.species) # 출력: Canis familiaris
# 클래스 변수를 변경하면 모든 인스턴스에 영향을 미침
Dog.species = "Canis lupus"
print(dog1.species) # 출력: Canis lupus
print(dog2.species) # 출력: Canis lupus
인스턴스 변수 (Instance Variable)
인스턴스 변수는 각 인스턴스에 속하는 변수로, 인스턴스마다 별도의 값을 가집니다. 인스턴스 변수는 __init__
메서드(혹은 다른 메서드) 내에서 self
를 통해 정의됩니다.
특징:
- 인스턴스마다 고유한 값을 가집니다.
- 인스턴스 이름을 통해 접근해야 합니다.
예제:
class Dog:
species = "Canis familiaris" # 클래스 변수
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
# 인스턴스 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Milo", 5)
# 인스턴스 변수에 접근
print(dog1.name) # 출력: Buddy
print(dog2.name) # 출력: Milo
# 인스턴스 변수는 각 인스턴스마다 다르게 설정 가능
dog1.age = 4
print(dog1.age) # 출력: 4
print(dog2.age) # 출력: 5
주요 차이점 요약
- 클래스 변수는 클래스와 모든 인스턴스에서 공유되며, 클래스 이름을 통해 접근할 수 있습니다.
- 인스턴스 변수는 특정 인스턴스에만 속하며, 인스턴스가 생성될 때마다 별도로 할당됩니다. 이 변수는 인스턴스 이름을 통해 접근합니다.
추가 예제
클래스와 인스턴스 변수를 사용하여 클래스를 정의하는 예를 더 살펴보겠습니다:
class Car:
# 클래스 변수
wheels = 4
def __init__(self, make, model):
# 인스턴스 변수
self.make = make
self.model = model
# 인스턴스 생성
car1 = Car("Toyota", "Corolla")
car2 = Car("Honda", "Civic")
# 클래스 변수에 접근
print(car1.wheels) # 출력: 4
print(car2.wheels) # 출력: 4
# 인스턴스 변수에 접근
print(car1.make) # 출력: Toyota
print(car2.model) # 출력: Civic
# 클래스 변수 변경 (모든 인스턴스에 영향)
Car.wheels = 6
print(car1.wheels) # 출력: 6
print(car2.wheels) # 출력: 6
# 인스턴스 변수 변경 (해당 인스턴스에만 영향)
car1.make = "Ford"
print(car1.make) # 출력: Ford
print(car2.make) # 출력: Honda
이 예제에서 Car
클래스는 wheels
라는 클래스 변수를 가지고 있으며, 각 인스턴스는 make
와 model
이라는 인스턴스 변수를 가집니다. 클래스 변수는 모든 인스턴스에서 동일하게 공유되지만, 인스턴스 변수는 각 인스턴스마다 다르게 설정됩니다.
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] Class 의 method ( 멤버 함수) 정의하기 (0) | 2024.08.13 |
---|---|
[ Python ] 클래스의 선행 참조 문제 분서과 해결 방법 (0) | 2024.08.13 |
[ Python ] pickle를 사용하여 데이터를 읽고 쓰기 (0) | 2024.08.13 |
[ Python ] struct를 사용해서 little/big endian으로 파일 읽고 쓰기 (0) | 2024.08.13 |
[ Python ] struct 패키지로 바이너리 데이터 다루기 (0) | 2024.08.12 |