파이썬/클래스와 객체 지향

[객체 지향 프로그래밍 4개의 기둥] 상속화

Data Jun 2025. 3. 20. 14:08

**상속(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()를 활용하면 효율적인 코드 작성이 가능하다.

 

객체 지향 프로그래밍에서 상속을 활용하면 더 효율적이고 확장성 높은 코드를 작성할 수 있습니다!