디지털 너구리 : 게임, IT 정보 및 다양한 지식 공유드립니다.

안녕하세요 엘빈입니다. 저번 포스팅에서는 클래스의  기본 개념에 대해서 알아봤는데요. 클래스를 이용해 다양한 방식으로 코드를 작성할 수 있습니다. 객체 지향 이론에서 빠질 수 없는 개념이 있습니다. 바로 상속이죠. 클래스 활요에서 빠질수 없는 개념으로 불필요한 반복을 피하고 효율적인 코드를 작성하기 위해 고안되었습니다.

 

 

 

 

 

 

  클래스 상속이란?

 

상속이란 물려받는다는 의미를 가진 단어입니다. 클래스 상속이란 말 그대로 어떠한 클래스의 기능을 다른 클래스에게 물려준다는 개념입니다. 프린터를 예로 들어봅시다. 프린터는 종이를 인쇄해주는 기능을 가지고 있습니다. 파이썬에서 프린터라는 물체를 만들어내려면 종이를 인쇄해주는 기능의 메소드와 클래스를 작성하면 됩니다.

 

 

하지만 프린터 종류는 하나가 아닙니다. 레이저 프린터와 잉크 프린터 두개로 나뉜다고 합니다. 두 프린터 다 종이를 인쇄할 수 있지만 같다고는 말할 수 없습니다. 이런 경우 상속의 개념을 활용합니다.

 

 

 

class Printer:
    def printPaper(self):
        print("print complete")

class LaserPrinter(Printer):
    def charge(self):
        print("toner charge")

class InkPrinter(Printer):
    def charge(self):
        print("ink charge")



laser_printer = LaserPrinter()
ink_printer = InkPrinter()

laser_printer.printPaper() # print complete
ink_printer.printPaper() # print complete

laser_printer.charge() # toner charge
ink_printer.charge() # ink charge

 

코드와 같이 총 3개의 클래스가 선언되어 있습니다.

 

 

Printer 클래스는 종이를 인쇄하는 메소드인 "printPaper"을 가지고 있습니다. 종류 상관없이 프린터의 가장 기본적인 기능입니다.

 

 

레이저 프린터와 잉크 프린터는 종이를 인쇄하는 기능은 공통으로 가지고 있지만 제각각 다른 방식으로 충전합니다. 그 때문에 둘의 구별해야 하므로 LaserPrinter와 InkPrinter 두개의 클래스를 선언합니다.

 

 

이 두개의 클래스 모두 "종이를 인쇄한다"라는 기능은 공통적으로 가지기 때문에 Printer 클래스를 상속받습니다. 이 후 충전하는 메소드만 제각각 다른 구문을 작성하였죠

 

 

이처럼 상속받는 클래스 "LaserPrinter"와 "InkPrinter"을 자식 클래스라고 하며 상속을 해주는 "Printer" 클래스를 부모 클래스라고 합니다.

 

 

실제 메소드를 호출해보면 부모로부터 물려받은 "printPaper"은 동일한 결과값을 보여줍니다. 하지만 자식 클래스에서 제각각 선언한 "charge"메소드는 다른 결과값을 보여주고 있죠.

 

 

이처럼 물체간의 포함 관계를 고려한 후 부모와 자식 클래스를 나누어 상속을 활용합니다.

 

 

 

 

 다중 상속

 

파이썬에서는 다중 상속을 지원합니다. 다른 프로그래밍 언어들은 다중 상속을 지원하지 않는 경우가 많습니다. 다중 상속이란 여러 개의 클래스를 동시에 상속받는 기능입니다.

 

 

예를 들어 레이저 프린터가 스캐너 기능을 가지고 있습니다. 하지만 동시에 프린터 기능도 가지고 있죠. 이럴 경우 프린터와 스캐너, 두 클래스로부터 동시에 상속을 받습니다. 코드로  한번 구현해보겠습니다.

 

 

 

class Printer:
    def printPaper(self):
        print("print complete")

class Scanner:
    def scanPaper(self):
        print("scan complete")

class LaserPrinter(Printer,Scanner):
    def charge(self):
        print("toner charge")

laser_printer = LaserPrinter()

laser_printer.scanPaper() # scan complete
laser_printer.printPaper() # print complete

 

코드와 같이 부모들로부터 물려받은 메소드 모두 정상 작동하는 것을 볼 수 있습니다.

 

 

 


마무리

지금까지 상속에 대한 가장 기본적인 개념을 알아보았는데요.  포스팅의 내용은 상속의 가장 기본적인 내용입니다. 상속을 본격적으로 활용하게 되면 부모와 자식클래스 간에 다양한 개념이 등장합니다. 내용을 꼭 숙지하시고 다음으로 넘어가시기 바랍니다.

 

포스팅 읽어주셔서 감사합니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band