**상속(Inheritance)**은 기존 클래스(부모 클래스)의 기능을 물려받아 새로운 클래스(자식 클래스)를 만드는 개념입니다.
이를 통해 코드를 재사용하고 유지보수를 쉽게 할 수 있습니다. 또한, **super()**를 사용하면 부모 클래스의 메서드를 자식 클래스에서 호출할 수 있습니다.
상속의 기본 개념
✔ 부모 클래스(Parent Class) → 공통 기능을 정의하는 클래스
✔ 자식 클래스(Child Class) → 부모 클래스를 상속받아 기능을 확장하는 클래스
예제: 기본적인 상속 구현
class Animal:
def speak(self):
return "소리를 낸다"
class Dog(Animal): # Animal 클래스를 상속받음
def speak(self):
return "멍멍!"
class Cat(Animal):
def speak(self):
return "야옹!"
dog = Dog()
cat = Cat()
print(dog.speak()) # 멍멍!
print(cat.speak()) # 야옹!
Dog와 Cat 클래스는 Animal 클래스를 상속받아, 공통된 구조를 유지하면서도 각자 다른 동작을 구현
상속의 장점
코드 재사용 → 중복을 줄이고 공통 기능을 부모 클래스에서 관리
유지보수 용이 → 수정할 때 한 곳만 변경하면 됨
확장성 증가 → 새로운 기능을 쉽게 추가 가능
메서드 오버라이딩(Method Overriding)
부모 클래스의 메서드를 자식 클래스에서 재정의(Overriding) 할 수 있습니다.
class Animal:
def speak(self):
return "소리를 낸다"
class Dog(Animal):
def speak(self):
return "멍멍!" # 부모 클래스의 speak()를 오버라이딩
dog = Dog()
print(dog.speak()) # 멍멍!
오버라이딩을 활용하면 같은 메서드 이름을 유지하면서도, 각 클래스에 맞는 동작을 정의할 수 있습니다.
super()를 사용한 부모 클래스의 메서드 호출
super()를 사용하면 자식 클래스에서 부모 클래스의 메서드를 호출할 수 있습니다. 특히, 부모 클래스의 __init__() 메서드를 호출할 때 많이 사용됩니다.
예제: super()를 사용한 부모 클래스 초기화
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # 부모 클래스의 __init__() 호출
self.breed = breed
dog = Dog("바둑이", "진돗개")
print(dog.name) # 바둑이
print(dog.breed) # 진돗개
설명
✔ super().__init__(name) → 부모 클래스(Animal)의 __init__()을 호출하여 name을 설정
✔ 자식 클래스(Dog)는 name뿐만 아니라 breed 속성을 추가하여 확장
super()를 활용하면 중복 코드 없이 부모 클래스의 기능을 쉽게 재사용할 수 있습니다!
super()를 사용하여 부모 클래스의 메서드 실행
super()는 단순히 __init__()뿐만 아니라 부모 클래스의 다른 메서드도 호출할 수 있습니다.
예제: 부모 클래스의 메서드를 확장하기
class Animal:
def speak(self):
return "소리를 낸다"
class Dog(Animal):
def speak(self):
return super().speak() + " 멍멍!" # 부모 클래스의 speak() 호출 후 확장
dog = Dog()
print(dog.speak()) # 소리를 낸다 멍멍!
설명
✔ super().speak() → 부모 클래스의 speak() 실행 후 추가 동작 수행
✔ 기존 부모 클래스의 동작을 유지하면서, 자식 클래스에서 새로운 기능을 추가
부모 클래스의 기본 기능을 유지하면서 확장할 때 유용함!
결론
✔ 상속은 부모 클래스의 기능을 자식 클래스가 물려받는 개념이다.
✔ 코드를 재사용하고 유지보수를 쉽게 할 수 있는 강력한 기능이다.
✔ 자식 클래스에서 부모 클래스의 메서드를 오버라이딩하여 원하는 동작을 구현할 수 있다.
✔ super()를 사용하면 부모 클래스의 __init__() 및 다른 메서드를 호출할 수 있다.
✔ 부모 클래스의 메서드를 유지하면서 새로운 기능을 추가할 때 super()를 활용하면 효율적인 코드 작성이 가능하다.
객체 지향 프로그래밍에서 상속을 활용하면 더 효율적이고 확장성 높은 코드를 작성할 수 있습니다!
'파이썬 > 클래스와 객체 지향' 카테고리의 다른 글
[객체 지향 프로그래밍 4개의 기둥] 추상화와 파이썬 타입 힌팅 예제 (0) | 2025.03.20 |
---|---|
[객체 지향 프로그래밍 4개의 기둥] 추상화와 파이썬 타입 힌팅(Type Hinting) (0) | 2025.03.20 |
[객체 지향 프로그래밍 4개의 기둥] 추상화와 문서화 스타일 (0) | 2025.03.20 |
🧐 스페셜 메소드(Special Method)란? (0) | 2025.03.20 |
파이썬은 순수 객체 지향 언어! 🐍✨ (0) | 2025.03.20 |