클래스 상속(Class Inheritance)은 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나입니다.
상속을 이용하면 이미 정의된 클래스의 속성과 메서드를 그대로 물려받아 새로운 클래스를 만들어낼 수 있습니다. 이를 통해 코드의 재사용성을 높이면서도, 유연성과 확장성을 갖춘 코드를 작성할 수 있습니다.
예를 들어, 학생 클래스와 대학생 클래스를 생성할 때, 학생 클래스를 상속받으면 대학생 클래스에 공통적으로 쓰이는 메서드와 속성을 그대로 갖출 수 있습니다. 또한, 게시글 클래스를 생성할 때, 공지사항 클래스와 일반 게시글 클래스로 나눠 코드를 작성하면, 각 클래스에 맞게 메서드와 속성을 추가해 효율적으로 코드를 작성할 수 있습니다.
아래는 클래스 상속을 이용한 예시 코드입니다.
- 동물(Animal) 클래스와 상속받은 개(Dog) 클래스와 고양이(Cat) 클래스
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
def get_age(self):
return self.age
class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age)
self.breed = breed
def get_breed(self):
return self.breed
class Cat(Animal):
pass
dog_1 = Dog('Max', 3, 'Golden Retriever')
print(dog_1.get_name()) # Max
print(dog_1.get_age()) # 3
print(dog_1.get_breed()) # Golden Retriever
cat_1 = Cat('Kitty', 4)
print(cat_1.get_name()) # Kitty
print(cat_1.get_age()) # 4
Animal 클래스는 동물의 이름과 나이를 출력하는 객체를 생성하는데 사용됩니다. Dog 클래스와 Cat 클래스는 Animal 클래스를 상속받아, 각각 강아지와 고양이를 출력하는 객체를 생성하는데 사용됩니다. 이때 Dog 클래스는 새로운 속성(breed)과 메서드(get_breed)를 추가하여, 강아지의 종류도 출력할 수 있게 하였습니다.
- 차(Car) 클래스와 상속받은 트럭(Truck) 클래스
class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def get_brand(self):
return self.brand
def get_model(self):
return self.model
def get_year(self):
return self.year
class Truck(Car):
def __init__(self, brand, model, year, capacity):
super().__init__(brand, model, year)
self.capacity = capacity
def get_capacity(self):
return self.capacity
car_1 = Car('BMW', 'M5', 2021)
print(car_1.get_brand()) # BMW
print(car_1.get_model()) # M5
print(car_1.get_year()) # 2021
truck_1 = Truck('Hyundai', 'Xcient', 2022, 5)
print(truck_1.get_brand()) # Hyundai
print(truck_1.get_model()) # Xcient
print(truck_1.get_year()) # 2022
print(truck_1.get_capacity()) # 5
Car 클래스는 차의 브랜드, 모델, 제조년도를 출력하는 객체를 생성하는데 사용됩니다. Truck 클래스는 Car 클래스를 상속받아, 트럭의 브랜드, 모델, 제조년도와 트럭의 적재용량을 출력하는 객체를 생성하는데 사용됩니다.
- 사람(Person) 클래스와 상속받은 학생(Student) 클래스
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def get_name(self):
return self.name
def get_age(self):
return self.age
def get_gender(self):
return self.gender
class Student(Person):
def __init__(self, name, age, gender, major):
super().__init__(name, age, gender)
self.major = major
def get_major(self):
return self.major
person_1 = Person('Alice', 25, 'female')
print(person_1.get_name()) # Alice
print(person_1.get_age()) # 25
print(person_1.get_gender()) # female
student_1 = Student('Bob', 30, 'male', 'Computer Science')
print(student_1.get_name()) # Bob
print(student_1.get_age()) # 30
print(student_1.get_gender()) # male
print(student_1.get_major()) # Computer Science
Person 클래스는 사람의 이름, 나이, 성별을 출력하는 객체를 생성하는데 사용됩니다. Student 클래스는 Person 클래스를 상속받아, 학생의 이름, 나이, 성별과 전공을 출력하는 객체를 생성하는데 사용됩니다. 이때 Student 클래스는 새로운 속성(major)과 메서드(get_major)를 추가하여, 학생의 전공도 출력할 수 있게 하였습니다.