상속

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.02
조회수
10
버전
v1

상속

상속(Inheritance)은 객체지향래밍(Object-Oriented Programming,OP)의 핵심 개념 중 하나로, 기존 클래스의 속성과 메서드를 새로운 클래스가 그대로 물려받아 재사용하고 확장할 수 있도록 해 메커니즘. 이는 코드의 중복을 줄이고, 프로그램의 유지보수성과 확장성을 높이는 데 중요한 역할을 합니다.

개요

상속을 통해 개발자는 기존에 정의된 클래스(부모 클래스 또는 슈퍼클래스)의 기능을 새로운 클래스(자식 클래스 또는 서브클래스)에서 재사용할 수 있습니다. 자식 클래스는 부모 클래스의 모든 공개(public) 및 보호(protected) 멤버를 접근할 수 있으며, 필요에 따라 새로운 속성과 메서드를 추가하거나 기존 메서드를 오버라이딩(Overriding)하여 기능을 변경할 수 있습니다.

상속은 "is-a" 관계를 표현하는 데 적합합니다. 예를 들어, 자동차 클래스가 있고, 전기차 클래스가 자동차를 상속받는 경우, "전기차는 자동차이다"라는 의미를 자연스럽게 표현할 수 있습니다.


상속의 기본 구조

부모 클래스와 자식 클래스

  • 부모 클래스(Parent Class): 다른 클래스가 상속받는 원본 클래스. 기반 클래스(Base Class) 또는 슈퍼클래스(Superclass)라고도 부릅니다.
  • 자식 클래스(Child Class): 부모 클래스로부터 속성과 메서드를 상속받는 클래스. 파생 클래스(Derived Class) 또는 서브클래스(Subclass)라고도 합니다.

예시 코드 (Python 기준)

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name}이(가) 소리를 냅니다."

class Dog(Animal):  # Animal 클래스를 상속
    def speak(self):  # 메서드 오버라이딩
        return f"{self.name}이(가) 멍멍하고 짖습니다."

# 사용 예시
my_dog = Dog("바둑이")
print(my_dog.speak())  # 출력: 바둑이이(가) 멍멍하고 짖습니다.

위 코드에서 Dog 클래스는 Animal 클래스를 상속받아 name 속성과 speak() 메서드를 사용할 수 있으며, speak() 메서드를 오버라이딩하여 구체적인 동작을 정의하고 있습니다.


상속의 유형

상속은 언어와 설계에 따라 다양한 형태로 구현될 수 있습니다.

1. 단일 상속 (Single Inheritance)

한 클래스가 단 하나의 부모 클래스만을 상속받는 방식입니다. 대부분의 객체지향 언어에서 기본적으로 지원됩니다.

class Parent:
    pass

class Child(Parent):
    pass

2. 다중 상속 (Multiple Inheritance)

한 클래스가 두 개 이상의 부모 클래스를 동시에 상속받는 방식입니다. Python과 C++ 등 일부 언어에서 지원하지만, 다이아몬드 문제(Diamond Problem)와 같은 복잡성을 유발할 수 있습니다.

class A:
    def method(self):
        print("A의 메서드")

class B(A):
    pass

class C(A):
    def method(self):
        print("C의 메서드")

class D(B, C):  # 다중 상속
    pass

d = D()
d.method()  # 출력: "C의 메서드" (메서드 해석 순서: MRO)

Python은 MRO(Method Resolution Order)를 사용하여 다중 상속 시 메서드 호출 순서를 결정합니다.

3. 계층적 상속 (Hierarchical Inheritance)

한 부모 클래스가 여러 자식 클래스에 의해 상속되는 구조입니다.

 Animal:
    def eat(self):
        print("먹는다")

class Dog(Animal):
    def bark(self):
        print("짖는다")

class Cat(Animal):
    def meow(self):
        print("야옹한다")


상속의 장점

  • 코드 재사용성: 중복된 코드를 줄이고, 공통 기능을 한 곳에서 관리할 수 있습니다.
  • 확장성: 기존 클래스를 변경하지 않고 새로운 기능을 추가할 수 있습니다.
  • 유지보수성: 공통 로직이 한 클래스에 집중되어 있어 수정이 용이합니다.
  • 다형성 지원: 상속은 다형성(Polymorphism)을 구현하는 기초가 됩니다.

주의사항 및 한계

  • 과도한 상속은 복잡성 증가: 깊은 상속 계층은 코드 이해를 어렵게 만들 수 있습니다.
  • 결합도 증가: 자식 클래스는 부모 클래스에 강하게 결합되어 있어, 부모 클래스 변경 시 영향을 받을 수 있습니다.
  • 다중 상속의 위험성: 명확한 설계 없이 다중 상속을 사용하면 예측할 수 없는 동작이 발생할 수 있습니다.

이러한 문제를 피하기 위해, 현대 소프트웨어 설계에서는 "상속보다는 구성(Favor composition over inheritance)"이라는 원칙을 권장합니다.


관련 개념

  • 추상 클래스(Abstract Class): 인스턴스를 생성할 수 없고, 상속을 위해 설계된 클래스로, 일부 메서드는 구현 없이 정의됩니다.
  • 인터페이스(Interface): 메서드의 시그니처만 정의하고, 구현은 자식 클래스에서 완료하도록 강제하는 설계 방식 (Java, C# 등).
  • 오버라이딩(Overriding): 자식 클래스가 부모 클래스의 메서드를 재정의하는 것.
  • 오버로딩(Overloading): 같은 이름의 메서드를 매개변수로 구분하여 여러 개 정의하는 것 (Python은 기본적으로 미지원).

참고 자료

  • Gamma, E., et al. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
  • Python 공식 문서 - Inheritance
  • Oracle Java Tutorials - Interfaces and Inheritance

상속은 객체지향 설계의 기초이지만, 적절한 설계 원칙과 함께 사용되어야 효과적인 소프트웨어 아키텍처를 구축할 수 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?