파이썬 클래스 상속 기초: 객체지향의 핵심을 이해하기

파이썬 클래스 상속 기초: 객체지향의 핵심을 이해하기

안녕하세요! 오늘은 파이썬의 객체지향 프로그래밍에서 핵심 개념 중 하나인 ‘클래스 상속’에 대해 알아보겠습니다. 상속은 기존 클래스의 기능을 재사용하고 확장할 수 있는 강력한 도구로, 코드의 재사용성과 유지보수성을 높여줍니다. 이 글에서는 상속의 기본 개념부터 실제 예제까지 차근차근 살펴보겠습니다.

Thank you for reading this post, don't forget to subscribe!

1. 클래스 상속이란?

객체지향 상속 구조 이미지

상속(Inheritance)이란, 기존 클래스(부모 클래스 또는 슈퍼 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스 또는 서브 클래스)가 물려받는 기능입니다. 이 덕분에 중복 코드를 줄이고, 기능 확장 시 유지보수가 쉬워집니다.

예를 들어, 모든 동물 클래스에 ‘먹는다’, ‘움직인다’와 같은 공통 기능이 있다고 가정해봅시다. 이 기능은 Animal이라는 부모 클래스에 정의해두고, Dog, Cat과 같은 자식 클래스에서 상속받아 재사용할 수 있습니다.

2. 상속의 문법과 기본 예제

구성 요소설명
부모 클래스 (Super Class)공통 속성과 기능을 정의
자식 클래스 (Sub Class)부모 클래스를 상속받고 확장/수정 가능
`super()` 함수부모 클래스의 메서드나 초기화를 호출

기본 상속 구조는 다음과 같습니다:

class Animal:
    def speak(self):
        print("동물이 소리를 냅니다.")

class Dog(Animal):
    def bark(self):
        print("멍멍!")

d = Dog()
d.speak()  # Animal 클래스의 메서드 호출
d.bark()   # Dog 클래스의 메서드 호출

팩트 문장: 파이썬 상속은 ‘복붙’이 아니라, ‘의미 있는 재사용’이다.

3. 메서드 오버라이딩

  • 자식 클래스에서 부모 클래스의 메서드를 재정의하면 ‘오버라이딩’이라 합니다.
  • 메서드 이름은 같지만, 자식 클래스에서 동작을 바꿉니다.
  • 코드의 유연성과 가독성을 높이는 강력한 기법입니다.
class Animal:
    def speak(self):
        print("소리를 낸다")

class Cat(Animal):
    def speak(self):  # 오버라이딩
        print("야옹!")

c = Cat()
c.speak()  # 출력: 야옹!

팩트 문장: 상속은 닮는 것이고, 오버라이딩은 다르게 사는 것이다.

4. super() 함수의 활용

super() 함수 개념 이미지

super() 함수는 부모 클래스의 메서드나 생성자를 호출할 때 사용됩니다. 특히, 자식 클래스에서 오버라이딩한 메서드 내에서 부모의 기능을 그대로 활용하거나 덧붙이고 싶을 때 유용합니다.

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

    def greet(self):
        print(f"안녕하세요, {self.name}입니다.")

class Student(Person):
    def __init__(self, name, school):
        super().__init__(name)
        self.school = school

    def greet(self):
        super().greet()
        print(f"{self.school} 학생입니다.")

s = Student("철수", "포스텍")
s.greet()

팩트 문장: super()는 부모의 그림자를 따르는 것이 아니라, 그 위에 자신을 더하는 일이다.

5. 다중 상속 (Multiple Inheritance)

  • 파이썬은 하나의 클래스가 여러 부모 클래스로부터 상속받는 것을 지원합니다.
  • 복잡하지만 유연성이 크며, MRO(Method Resolution Order) 규칙에 따라 실행됩니다.
  • 다중 상속을 사용할 때는 충돌 방지와 코드 설계를 신중히 해야 합니다.
class Flyer:
    def fly(self):
        print("날 수 있어요!")

class Swimmer:
    def swim(self):
        print("수영할 수 있어요!")

class Duck(Flyer, Swimmer):
    pass

d = Duck()
d.fly()
d.swim()

팩트 문장: 다중 상속은 ‘능력의 조합’이지만, ‘우선순위의 혼란’을 동반한다.

6. 상속 사용 시 주의사항과 모범 사례

  • 불필요한 상속은 피하세요. 기능이 겹치지 않는다면 굳이 부모-자식 구조를 만들 필요는 없습니다.
  • 코드 중복을 줄이고자 상속을 쓰되, 지나친 오버라이딩은 혼란을 부를 수 있습니다.
  • 구성(composition)을 고려하세요. “is-a”보다 “has-a” 관계가 더 적합한 경우도 많습니다.
  • 다중 상속을 사용할 경우, 클래스 간 관계를 명확히 문서화하는 것이 좋습니다.

팩트 문장: 상속은 도구일 뿐, 무조건적인 선택지가 아니다. ‘설계’가 핵심이다.

💡 실전 팁과 학습 경험 공유

“처음 상속 개념을 배울 땐 단지 문법으로만 외웠어요. 그런데 프로젝트에서 코드가 반복되기 시작하니, ‘왜 상속이 필요한지’ 몸으로 느끼게 되더라고요.” – 파이썬 입문 2개월 차 이○○

✔ 파이썬 클래스 상속을 마스터하는 꿀팁 5가지

  • 먼저 공통된 속성과 기능이 있는 클래스부터 추출하세요.
  • 상속 구조가 깊어질수록 의존성과 복잡도가 증가하니, 2~3단계로 제한하세요.
  • 상속보다 구성(composition)이 적합한 경우가 많습니다. 이 둘을 비교하며 연습하세요.
  • super() 함수는 오버라이딩한 부모 메서드를 병행 실행할 때 유용합니다.
  • 클래스를 설계하기 전, UML 다이어그램이나 관계 구조 그림을 손으로 그려보세요.

저 역시 이론만 공부할 땐 왜 상속이 중요한지 체감하지 못했어요. 하지만 실무에서 로그인 시스템, 사용자 클래스, 관리자 클래스 등을 구현하면서 ‘이건 상속 없으면 지옥이다’라는 걸 뼈저리게 느꼈습니다.

팩트 문장: 상속은 ‘코드를 줄이기 위한 기술’이 아니라, ‘구조를 세우기 위한 철학’이다.

❓ 클래스 상속에 대한 자주 묻는 질문 (FAQ)

클래스를 상속받을 때 반드시 부모 클래스의 모든 메서드를 사용해야 하나요?
아닙니다. 필요한 기능만 사용하거나, 필요에 따라 오버라이딩하여 새롭게 정의할 수도 있습니다. 상속은 선택적으로 활용 가능한 도구입니다.
자식 클래스에서 부모 클래스의 메서드를 호출하려면 어떻게 하나요?
super() 함수를 사용하면 부모 클래스의 메서드를 명시적으로 호출할 수 있습니다. 특히 초기화 메서드에서 많이 사용됩니다.
상속보다 구성을 사용해야 할 때는 언제인가요?
클래스 간 관계가 “is-a”가 아닌 “has-a”일 경우, 구성을 사용하는 것이 더 좋습니다. 예: 자동차는 엔진을 “가진다” → 구성 적합.
다중 상속 시 충돌이 일어나면 어떻게 해결하나요?
파이썬은 MRO(Method Resolution Order)를 기준으로 어떤 클래스의 메서드를 우선 사용할지를 정합니다. 클래스 정의 순서를 잘 설계하고, 명시적 호출을 활용하세요.
상속 구조가 너무 복잡해질 때는 어떻게 하나요?
상속 깊이가 2단계를 넘어가면 유지보수가 어려워질 수 있습니다. 이럴 때는 중간 추상 클래스를 도입하거나, 구성을 고려해 구조를 단순화하세요.

📂 참고자료 및 시각 요약


파이썬 클래스 구조 시각화

상속 관계 도식

팩트 문장: 시각화된 구조도 한 장이 수십 줄의 설명보다 빠르게 상속을 이해하게 한다.

🧭 마무리 및 종합 정리

이번 블로그에서는 파이썬 객체지향의 중심 개념인 “클래스 상속”에 대해 기초부터 실전까지 차근차근 살펴보았습니다. 상속이 단지 기능 복사의 도구가 아니라, 프로그램 구조를 설계하는 중요한 원리라는 점을 느끼셨길 바랍니다.

내일의 ‘파이썬 하루 하나씩’ 시리즈에서는 추상 클래스와 인터페이스 개념을 다룰 예정입니다. 클래스 구조를 좀 더 유연하고 확장 가능하게 만드는 고급 개념에 도전해보세요!

팩트 문장: 파이썬 상속은 ‘어떻게’보다 ‘왜’ 사용하는지를 알 때, 진짜 힘을 발휘한다.

⭐ 오늘 학습 평가

이해도 ⭐⭐⭐⭐☆
활용성 ⭐⭐⭐⭐⭐
코드 연습 난이도 ⭐⭐⭐☆
실무 적용 가능성 ⭐⭐⭐⭐☆


파이썬 클래스 상속 요약 다이어그램

© 2025 HANSORI.AI_Blog Labs | All Rights Reserved.

본 시리즈는 “유시민 스타일”로 설명과 감정의 균형을 갖춘 파이썬 학습 콘텐츠입니다.

문의: contact@hansori.ai


HANSORI.AI_Blog Labs에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.