Python 클래스 상속과 오버라이딩 예제 정리
파이썬 클래스 상속 및 오버라이딩 소개
파이썬은 객체 지향 프로그래밍을 지원하는 강력한 언어입니다. 특히 클래스와 객체를 통해 코드의 재사용성을 높이고, 효율성을 극대화할 수 있습니다. 그중에서도 클래스 상속은 상위 클래스의 특성을 하위 클래스에서 활용할 수 있게 해주는 중요한 개념입니다. 이번 포스트에서는 파이썬 클래스 상속 및 오버라이딩에 대해 자세히 알아보도록 하겠습니다.

클래스 생성하기
클래스를 생성하는 것은 매우 간단합니다. 먼저, 클래스를 정의해야 합니다. 예를 들어, 학생을 나타내는 클래스를 만들어보겠습니다.
class Student:
def __init__(self, name, gender, grade):
self.name = name
self.gender = gender
self.grade = grade
위 코드는 학생의 이름, 성별, 학년 정보를 갖는 Student
클래스를 생성하는 예입니다. 클래스가 데이터를 관리하는 방식은 이처럼 __init__
메서드를 통해 매개변수를 설정하여 인스턴스를 초기화하는 것입니다.
메소드 추가하기
클래스 안에 메소드를 정의하여 특정 기능을 구현할 수 있습니다. 예를 들어, 위 Student
클래스에 학생 정보를 출력하는 메소드를 추가해 보겠습니다.
class Student:
def __init__(self, name, gender, grade):
self.name = name
self.gender = gender
self.grade = grade
def info_student(self):
print(f"이름: {self.name}, 성별: {self.gender}, 학년: {self.grade}")
이제 info_student
메소드를 호출하면 학생에 대한 정보를 출력할 수 있습니다.
클래스 상속의 원리
클래스 상속은 부모 클래스의 속성과 메소드를 자식 클래스가 물려받는 것을 의미합니다. 이를 통해 공통된 기능을 재사용할 수 있어 코드 중복을 줄일 수 있습니다. 예를 들어, Student
클래스를 상속받아 가족 정보를 관리하는 클래스를 만들어 보겠습니다.
class StudentFamily(Student):
def __init__(self, name, gender, grade, mother_name, father_name):
super().__init__(name, gender, grade)
self.mother_name = mother_name
self.father_name = father_name
위와 같이 자식 클래스에서 super()
를 호출하여 부모 클래스의 생성자를 호출한 후, 추가적인 속성을 설정할 수 있습니다.
자식 클래스의 메소드 추가
자식 클래스에서 부모 클래스의 메소드를 그대로 사용할 수 있으며, 필요에 따라 수정하거나 새로운 메소드를 추가할 수도 있습니다. 다음은 학생의 부모 정보를 출력하는 메소드를 추가한 예제입니다.
class StudentFamily(Student):
def __init__(self, name, gender, grade, mother_name, father_name):
super().__init__(name, gender, grade)
self.mother_name = mother_name
self.father_name = father_name
def family_info(self):
print(f"{self.name} 학생의 어머니는 {self.mother_name}이고, 아버지는 {self.father_name}입니다.")
메소드 오버라이딩
부모 클래스의 메소드를 자식 클래스에서 수정하고 싶을 때는 오버라이딩을 활용합니다. 간단한 예를 들어 보겠습니다. 먼저, 부모 클래스에 정의된 메소드를 자식 클래스에서 어떻게 변경할 수 있는지 알아보겠습니다.
class Person:
def greet(self):
print("안녕하세요!")
class Student(Person):
def greet(self):
print("안녕하세요, 저는 학생입니다!")
위의 예에서 Student
클래스는 Person
클래스의 greet
메소드를 오버라이딩하여 자신만의 인사말을 출력할 수 있도록 했습니다. 이를 통해 하위 클래스는 상위 클래스의 기능을 변경하여 사용할 수 있습니다.
다중 상속
파이썬은 하나의 클래스가 여러 부모 클래스를 동시에 상속받는 다중 상속을 지원합니다. 다중 상속을 사용하면 여러 클래스로부터 속성과 메소드를 동시에 물려받을 수 있지만, 코드 복잡성을 증가시킬 수 있습니다. 간단한 예를 통해 살펴보겠습니다.
class Vehicle:
def start(self):
print("차량이 출발합니다.")
class Electric:
def charge(self):
print("차량을 충전합니다.")
class ElectricCar(Vehicle, Electric):
pass
위와 같이 ElectricCar
클래스는 Vehicle
와 Electric
클래스를 동시에 상속받습니다. 이제 ElectricCar
인스턴스는 두 부모 클래스의 메소드를 모두 사용할 수 있습니다.
메소드 해석 순서(MRO)
다중 상속을 사용할 때, 메소드를 호출할 때 어느 부모 클래스의 메소드가 호출될지를 결정하는 것이 중요합니다. 이를 해결하기 위해 파이썬은 메소드 해석 순서(Method Resolution Order, MRO) 알고리즘을 사용하여 메소드를 찾는 순서를 정합니다. 이를 통해 메소드 충돌 문제를 해결할 수 있습니다.
class A:
def greet(self):
print("A 인사")
class B(A):
def greet(self):
print("B 인사")
class C(A):
def greet(self):
print("C 인사")
class D(B, C):
pass
d = D()
d.greet() # B 인사
위 예제에서 클래스 D
는 B
와 C
를 상속받으며, 메소드 해석 순서는 왼쪽에서 오른쪽으로 진행됩니다. 따라서 B
클래스의 greet
메소드가 호출됩니다.

결론
이번 포스트에서는 파이썬의 클래스 상속과 오버라이딩 개념을 살펴보았습니다. 클래스를 활용하여 코드 재사용성을 높이고, 메소드 오버라이딩을 통해 기능을 확장할 수 있다는 것이 객체 지향 프로그래밍의 큰 장점입니다. 하지만 다중 상속을 사용할 때는 메소드 해석 순서를 잘 이해하고 활용해야 하며, 코드의 가독성도 고려해야 합니다.
이와 같은 접근 방식을 통해 파이썬의 객체 지향 프로그래밍에 대한 이해도를 높이고, 더 나은 소프트웨어 개발에 기여할 수 있을 것입니다.
자주 묻는 질문과 답변
파이썬 클래스 상속이란 무엇인가요?
파이썬 클래스 상속은 한 클래스가 다른 클래스의 속성과 메소드를 물려받는 기능을 의미합니다. 이를 통해 코드의 재사용성을 높이고, 중복을 줄일 수 있습니다.
메소드 오버라이딩은 어떤 경우에 사용하나요?
메소드 오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 변경할 때 쓰입니다. 이렇게 함으로써 자식 클래스에 맞는 동작을 정의할 수 있습니다.
다중 상속이란 무엇인가요?
다중 상속은 하나의 클래스가 여러 부모 클래스로부터 속성과 메소드를 동시에 상속받는 것을 말합니다. 이 기능은 다양한 특성을 통합할 수 있게 해줍니다.
메소드 해석 순서는 어떻게 결정되나요?
파이썬은 메소드 해석 순서(MRO) 알고리즘을 사용해 메소드를 호출할 때 우선적으로 어떤 부모 클래스의 메소드를 사용할지를 정합니다. 이로 인해 메소드 충돌을 방지할 수 있습니다.