안녕하세요 엘빈입니다. 저번 포스팅에서는 클래스 상속의 기본 내용에 대해서 알아보았는데요. 클래스간의 상속에서 발생하는 문제들과 필요한 기능들에 대하여 파이썬은 많은 것들을 제공하고 있습니다. 대표적인 것으로 메소드 오버라이딩이 있죠. 이번 포스팅에서는 파이썬 클래스 메소드 오버라이딩에 대해서 알아보겠습니다.
메소드 오버라이딩이란 부모클래스에 존재하는 메소드와 똑같은 이름의 메소드를 자식 클래스내에 구현하는 것을 말합니다. 메소드 오버라이딩은 상속 관계에서만 적용할 수 있는 개념입니다. 왜 부모와 자식의 메소드 이름을 같게 할까요?
쉬운 예를 들어봅시다. 프린터의 기능을 상속받는 레이저 프린터가 있습니다. 레이저 프린터는 프린터로부터 "종이를 인쇄한다"라는 printPaper이라는 기능을 상속받습니다.
하지만 레이저 프린터는 단순히 종이를 인쇄하는 것이 아니라 "토너를 이용해 종이를 인쇄한다"라는 기능으로 표현하고 싶습니다. 아마 여러분은 "새로운 메소드를 만들던가 상속을 취소하면 되지 않나"라는 의문이 드실것입니다. 하지만 보통 상속 관계에서는 2개 이상 메소드를 상속받으며 이런 경우가 생길때마다 메소드를 추가하면 코드가 더욱 복잡해 질 것입니다.
그래서 나온 개념이 메소드 오버라이딩입니다. 자식 클래스내에 부모로부터 상속받은 메소드 명과 똑같이 해서 구현하는 것이죠. 예제 코드를 작성해봅시다.
class Printer:
def printPaper(self):
print("print complete")
class LaserPrinter(Printer):
def charge(self):
print("toner charge")
def printPaper(self):
print("print complete by toner")
printer = Printer()
laser_printer = LaserPrinter()
printer.printPaper() # print complete
laser_printer.printPaper() # print complete by toner
다음 코드와 같이 Printer 객체와 LaserPrinter 객체를 생성 후 printPaper 메소드를 실행할 때 결과가 다른 것을 알 수 있습니다. 부모 클래스와 자식 클래스에 동일한 이름의 메소드가 있다면 자식 클래스의 메소드가 우선적으로 실행됩니다.
어려운 개념은 아니고 동일한 이름의 메소드를 자식 클래스에 구현하기만 하면 됩니다. 내용을 다르게 해서 말이죠. 이 개념을 통해 자식 클래스는 부모로부터 원하는 기능만 골라 상속 받을 수 있습니다.
이번 포스팅에서는 클래스 상속 관계에서 메소드 오버라이딩에 대해서 알아보았는데요. 상속 관계를 구성할 때 자주 사용되는 개념이니 꼭 숙지하시기 바랍니다. 포스팅 읽어주셔서 감사합니다.