본문 바로가기
파이썬/주식 자동매매

Python 키움API 자동매매프로그램 개발-25.Python 기초편 클래스(4) 상속

by 행복론자 2021. 2. 3.

시리즈 이전글입니다.

2021/02/02 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-24.Python 기초편 클래스(3) 속성, 인스턴스 확인

 

 

09.상속

상속(inheritance)은 객체지향 프로그래밍에서 큰 비중을 차지하고 있는 내용 중 하나로 중요한 개념입니다. 하지만 프로젝트를 진행하며 크게 중요한 내용은 아닐 뿐더러 

상속의 내용을 정확히 이해하는 것은 쉽지 않기 때문에 간단히 소개하는 정도로 설명 드려보겠습니다.

 

상속이란 우리가 잘 아는 것 같이 물려준다는 의미인데 흔히 들어본 상속의 예는 할아버지가 아버지에게, 아버지가 자식들에게 상속해준다고 할 때 사용하는 말입니다.

 

그럼 프로그래밍 세계에서 상속이란 무엇일까요?

먼저 클래스끼리도 부모-자식 관계가 있을 수 있다는 것을 알아야 합니다.

클래스끼리 부모-자식 관계가 형성 되어 있다면 부모 클래스에서 정의한 속성, 함수들을 자식 클래스에서 그대로 물려받아 사용하거나 변형하여 사용할 수 있습니다.

이를 자식 클래스에서 부모 클래스를 상속받는다고 표현합니다. 

상속을 해주는 클래스를 부모클래스(parent class) 혹은 슈퍼클래스(super class)라고 하며 상속을 받는 클래스는 자식클래스(child class) 혹은 서브클래스(sub class)라고 부릅니다. 

 

그러면 왜 부모-자식 관계가 필요할까요? 

계층구조를 떠올리시면 조금 더 이해하기 쉽습니다.

스타크래프트라는 게임의 유닛들로 예를 들어 설명드리겠습니다. 

만약 이 게임을 모르시더라도 게임 내에 존재하는 유닛들을 단순히 계층화 시켰다고 이해해주시기 바랍니다.

게임에서 사용자가 만들 수 있는 테란 유닛들의 관계가 다음과 같다고 해보겠습니다.



게임에서 존재하는 유닛들은 기본적으로 체력, 이동속도, 공격력 그리고 방어력을 가지고 있고 움직일 수도 있습니다.

이는 모든 유닛들이 공통적으로 가지고 있는 속성과 기능(함수)입니다.

여기서 유닛 클래스에 체력, 이동속도, 공격력, 방어력을 담은 변수와 

움직일 수 있는 기능(함수)를 만들고 하위 계층에서 이 유닛 클래스를 상속받게 한다면  

모든 유닛들에게 필요한 체력, 이동속도, 공격력 그리고 방어력을 클래스마다 일일이 만들지 않고서도 사용할 수 있게 한다는 장점이 있습니다.

 

먼저 제일 상위 계층에 존재하는 유닛 클래스를 간단히 코드로 만들어 보겠습니다.

class Unit:
  def __init__(self):
      self.life = 50
      self.speed = 10
      self.power = 10
      self.defense = 1
     
  def move(self):
      print("움직입니다.")

 

 

상속 받을 자식클래스에서 상속해줄 부모 클래스를 설정하는 방법은 다음과 같습니다.

class 자식클래스(부모클래스):
....

 

 

그럼 지상유닛 클래스에서 유닛 클래스를 상속 받도록 하기위해 다음과 같이 코드를 만듭니다.

class GroundUnit(Unit):
  def show_stats(self):
      print(self.life)
      print(self.speed)
      print(self.power)
      print(self.defense)

 

 

그 다음 지상유닛 클래스의 객체를 하나 만들고 show_stats 함수를 호출해보겠습니다.

ground_unit = GroundUnit()
ground_unit.show_stats()

#  50
#  10
#  10
#  1

 

 

지상유닛 클래스에서는 life, speed, power, defense라는 변수가 없음에도 부모클래스인 유닛 클래스에서 가지고 있으므로 이를 이용할 수 있게 되는 것입니다.

함수도 마찬가지입니다.

지상유닛 객체에는 move 함수가 없지만 부모클래스에서 존재하기에 사용할 수 있게 됩니다.

ground_unit.move()

 

 

하지만 부모한테 상속받은 것이라고 무조건 그대로 사용해야하는 것은 아닙니다.

다음은 유닛클래스를 상속 받는 공중유닛 클래스입니다.

부모클래스에 존재하는 move 함수를 상속 받았지만 

공중유닛만의 move 함수로 변형하여 사용합니다. 이미 부모클래스에 존재하는 동일한 함수를 덮어쓴다고 해서 이를 오버라이딩(Overriding)라고도 합니다. 

또 fly라는 자신만의 함수를 만들어 부모클래스로부터 좀 더 상세화된 클래스가 되었습니다.

class AirUnit(Unit):  
 
  def move(self):      
      print("공중유닛이 움직입니다.")
 
  def fly(self):
      self.move()

 

 

이렇게 유닛이라는 기본 틀에서 지상유닛, 공중유닛로 세분화하고 이후 또 세분화하면서 구체적인 유닛으로 나뉘어지게 됩니다.

중요한 것은 자식클래스는 부모클래스, 그리고 부모클래스의 부모클래스에 존재하는 속성, 함수들을 사용할 수 있으며 부모클래스에서 존재하는 함수를 자식클래스만의 기능으로 변형해서(Overriding) 사용할 수 있다는 것입니다.  

 

프로그래밍을 처음 접하시는 분에게 클래스라는 것이 아직 익숙하지 않으실 수도 있는 와중에 클래스끼리의 상속을 다 이해하고 활용하실 필요까지는 없다고 생각해서 간략하게 알아보았습니다. 하지만 아무리 간략하게 했더라도 왜 상속이란 개념이 필요하며 상속 받은 자식클래스가 가능한 일이 무엇인지 정도는 짚고 넘어가시기를 바랍니다.

 

 


같이 보시면 좋을 글

2021/02/10 - [파이썬/주식 자동매매] - 주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

 

주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

주식매매프로그램 개발 노하우에 관한 제 전자책이 발간되었습니다. https://kmong.com/gig/292764 주식매매프로그램, 쉽게 따라 만드는 노하우와 소스를 드립니다. | 36000원부터 시작 가능한 총 평 0개

jsp-dev.tistory.com

 

2021/02/04 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-26.Python 기초편 모듈(1) import, from

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글