파이썬 프로그래밍 시작 (13) 상속(inheritance)

파이썬 프로그래밍 시작 (13) 상속(inheritance)

파이썬은 객체 지향 언어이고, 객체지향 언어는 상속이라는 기능을 가지고 있습니다. 부모가 아이에게 어떤 것을 전달하는 것을 상속이라고 합니다. 파이썬 프로그래밍에서도 똑같은 의미로 쓰입니다. 이 포스팅에서 준비한 3개의 파이썬 코드를 실행해보면 초보 파이썬 프로그래머라도 상속에 대해 확실히 이해하실 수 있을 것입니다. 기반이 되는 클래스와 여기에 새로운 기능을 추가해가면서 상속에 대해 이해해보도록 하겠습니다.


글의 순서

파이썬 프로그래밍에서 상속이란
3개의 파이썬 코드로 이해하는 상속의 개념
상속에서 알아두어야 할 사항


파이썬 프로그래밍에서 상속이란

지난 포스팅에서 클래스를 설계도, 오브젝트를 설계도로 만든 물건이라고 배웠습니다. 클래스를 만드는 이유는 이 설계도를 이용해서 여러 개의 물건을 찍어내겠다는 의미입니다. 만약 물건들을 만들 때, 그 물건들 나름대로의 특별한 특성이나 기능도 가지게 만들고 싶다면 새로운 클래스가 또 필요합니다. 이 새로운 클래스를 만들 때 사용되는 것이 상속의 개념입니다. 상속을 영어로는 inheritance라고 합니다. 예를 들어보면 이해가 더 빠를 것입니다.

커피전문점이라는 클래스를 만들었고, 그 클래스가 만든 오브젝트는 주문을 하고, 레시피도 확인할 수 있는 기능을 가졌다고 가정하겠습니다. 이 클래스의 기능을 가지고 있으면서, 베이킹 레시피까지 확인할 수 있는 클래스가 또 필요하다면 어떻게 해야 할까요?



3개의 파이썬 코드로 이해하는 상속의 개념

일단 지난 포스팅에 이어 클래스07 코드를 만들었습니다. 클래스07 코드는 Cafe라는 클래스와 이 클래스를 이용해서 만든 kappa라는 오브젝트를 보여줍니다. kappa라는 오브젝트는 클래스 안에 들어있는 ordering이라는 함수와 coffee_recipe이라는 함수를 쉽게 사용할 수 있습니다. coffee_recipe이란 함수는 2가지의 커피 레시피를 알려줍니니다. 클래스07 코드 실행결과도 함께 나타내었습니다.

실습코드 : 클래스07

class Cafe:
  def __init__(self, menu):
    self.menu = menu

  def ordering(self):
    print(“주문할게요. 저는 ” + self.menu + “! “)

  def coffee_recipe(self):
    if self.menu == “아메리카노”:
    print(self.menu + ” : 에스프레소 + 물”)
   elif self.menu == “카페라떼”:
    print(self.menu + ” : 에스프레소 + 우유”)
   else:
    print(“아메리카노와 카페라떼만 가능합니다.”)

kappa = Cafe(“카페라떼”)
kappa.ordering()
kappa.coffee_recipe()

클래스07 실행결과

주문할게요. 저는 카페라떼!
카페라떼 : 에스프레소 + 우유

클래스08 코드는 클래스07에 추가된 Bakery_Cafe라는 클래스와 이 클래스로 만든 baker라는 오브젝트를 보여주고 있습니다. Bakery_Cafe라는 클래스는 Cafe라는 클래스에 baking_recipe라는 함수만 추가한 것입니다. 만약 다른 기능을 하는 함수를 덧붙이고 싶다면 어떻게 해야 할까요? 마찬가지로 새로운 클래스를 만들고 거기에 원하는 기능을 하는 함수를 덧붙이면 됩니다. 그런데, 이렇게 하면 똑같은 함수가 클래스마다 중복되고, 코드는 한없이 길어지게 됩니다. 이것을 깔끔하게 처리할 수 있는 것이 상속이라는 개념입니다.

클래스08, 09 코드를 비교해보면 클래스 Bakery_Cafe는 Cafe가 가진 기능을 그대로 이어받으면서 baking_recipe라는 함수가 추가된 형태입니다. 이럴 경우 class Bakery_Cafe(Cafe): 와 같이 class를 선언할 때 괄호 안에 Cafe를 넣어주면 Cafe가 가진 기능을 그대로 받아서 쓴다는 의미가 됩니다. 이것을 상속이라고 합니다. 상속을 이용하면 코드를 짧게 쓸 수 있고, 이해하기도 편합니다.

다른 방법으로 표현해보면, 상속은 남이 만들어 놓은 기본적인 설계도를 이용하되 내가 원하는 것만 추가하거나 교체할 때 쓰는 것입니다. 남이 만들어 놓은 기본적인 설계도를 부모, 이를 기반으로 새롭게 생성한 설계도를 자식(child)라고 부릅니다. 부모가 자식에게 뭔가를 물려주는 것을 상속이라고 하는데, 컴퓨터에서도 똑같은 의미로 쓰입니다.

실습코드 : 클래스08

class Cafe:
  def __init__(self, menu):
    self.menu = menu

  def ordering(self):
   print(“주문할게요. 저는 ” + self.menu + “! “)

  def coffee_recipe(self):
    if self.menu == “아메리카노”:
    print(self.menu + ” : 에스프레소 + 물”)
   elif self.menu == “카페라떼”:
    print(self.menu + ” : 에스프레소 + 우유”)
   else:
    print(“아메리카노와 카페라떼만 가능합니다.”)

class Bakery_Cafe:
  def __init__(self, menu):
   self.menu = menu

def ordering(self):
  print(“주문할게요. 저는 ” + self.menu + “! “)

def coffee_recipe(self):
  if self.menu == “아메리카노”:
   print(self.menu + ” : 에스프레소 + 물”)
  elif self.menu == “카페라떼”:
   print(self.menu + ” : 에스프레소 + 우유”)
  else:
   print(“아메리카노와 카페라떼만 가능합니다.”)

def baking_recipe(self):
  if self.menu == “스콘”:
   print(self.menu + ” 베이킹 : 스콘반죽을 180도 오븐에서 15분”)
  else:
   print(self.menu + ” 재료가 떨어졌어요”)

baker = Bakery_Cafe(“아메리카노”)
baker.ordering()
baker.coffee_recipe()

baker = Bakery_Cafe(“스콘”)
baker.ordering()
baker.coffee_recipe()
baker.baking_recipe()

클래스08 실행결과

주문할게요. 저는 아메리카노!
아메리카노 : 에스프레소 + 물
주문할게요. 저는 스콘!
아메리카노와 카페라떼만 가능합니다.
스콘 베이킹 : 스콘반죽을 180도 오븐에서 15분

실습코드 : 클래스09

class Cafe:
  def __init__(self, menu):
    self.menu = menu

  def ordering(self):
   print(“주문할게요. 저는 ” + self.menu + “! “)

  def coffee_recipe(self):
    if self.menu == “아메리카노”:
    print(self.menu + ” : 에스프레소 + 물”)
   elif self.menu == “카페라떼”:
    print(self.menu + ” : 에스프레소 + 우유”)
   else:
    print(“아메리카노와 카페라떼만 가능합니다.”)

class Bakery_Cafe(Cafe):
  def baking_recipe(self):
   if self.menu == “스콘”:
    print(self.menu + ” 베이킹 : 스콘반죽을 180도 오븐에서 15분”)
   else:
    print(self.menu + ” 재료가 떨어졌어요”)

baker = Bakery_Cafe(“아메리카노”)
baker.ordering()
baker.coffee_recipe()

baker = Bakery_Cafe(“스콘”)
baker.ordering()
baker.coffee_recipe()
baker.baking_recipe()


상속에서 알아두어야 할 사항

Cafe라는 클래스로 만들어진 kappa라는 오브젝트가 있다고 할 때, kappa는 Bakery_Cafe에만 들어있는 baking_recipe라는 함수를 사용하지 못합니다. Cafe에는 baking_recipe라는 함수가 없기 때문입니다.


마치며 …

이 포스팅에서는 파이썬 프로그래밍에서 코드를 간략하게 만들고, 이해하기 쉽게 만들어주는 상속이라는 개념에 대해 알아보았습니다. 부모가 자식에게 뭔가를 물려주는 것을 상속이라고 합니다. 파이썬 프로그래밍에서도 상속은 이와 똑같은 의미로 사용됩니다. 기반이 되는 클래스가 부모, 이 클래스를 기반으로 하되, 새로운 기능을 추가한 클래스를 자식이라고 할 수 있습니다. 초등학생 파이썬 프로그래머나 초보 프로그래머들에게 이제는 패키지와 모듈이라는 마지막 주제가 남아 있습니다. 힘내 주시기 바랍니다.

 

 

함께 참고하면 더 좋은 글 :
1. 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit
2. 파이썬 프로그래밍 시작 (2) 변수, 타입, 문자열 실습
3. 파이썬 프로그래밍 시작 (3) 파이썬 함수 실습
4. 파이썬 프로그래밍 시작 (4) 조건문
5. 파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기
6. 파이썬 프로그래밍 시작 (6) 반복문
7. 파이썬 프로그래밍 시작 (7) 반복문과 무한루프
8. 파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트
9. 파이썬 프로그래밍 시작 (9) 자료구조(Data Structure) : 튜플
10. 파이썬 프로그래밍 시작 (10) 자료구조(Data Structure) : 딕셔너리
11. 파이썬 프로그래밍 시작 (11) 연습문제 : 자료구조
12. 파이썬 프로그래밍 시작 (12) 클래스, 오브젝트(object, 객체)
13. 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
14. 애플 실리콘 M1 시리즈 비교 : M1 Pro, M1 Max, M1 Ultra


참고자료

[1] 테크보이 워니(2020), 코딩 1시간만에 배우기 – 파이썬 (ft. 실리콘밸리 엔지니어)
[2] 윤인성(2019), 혼자 공부하는 파이썬, 한빛미디어

Leave a Comment