본문 바로가기
Python/Basic Data Analysis

[Python] 상속(Inheritance), 메서드 오버라이딩(Overriding)

by JKyun 2017. 4. 5.

안녕하세요. 우주신입니다.


이번 포스팅에서는 클래스의 상속(Inheritance)과  상속의 개념 중 하나인 메소드 오버라이딩(Overriding)에 대해 정리해보겠습니다.




1. 상속(Inheritance)


'상속'이란 "뒤를 이음", "물려받다"라는 뜻으로, 클래스에도 이런 개념을 적용할 수 있습니다.


어떤 클래스를 만들 때 다른 클래스의 기능을 그대로 가지고 올 수 있다는 개념인데, 

이 때, 물려주는 클래스를 부모클래스(Super class), 물려받는 클래스를 자식클래스(Sub class)라고 합니다.


이러한 상속을 이용하면 중복코드가 작성되는 것을 방지할 수 있으며, 코드의 유지보수가 아주 쉬워집니다.


간단한 계산기를 만들어보며 상속에 대해 설명해보겠습니다.

Calculate라는 클래스를 만든 후, type = "low"라고 정의했습니다.

__init__ 함수를 통해 2개의 입력값을 받을 수 있고, sum 함수를 통해 덧셈 결과를 출력할 수 있습니다.



Calculate의 인스턴스 c에 입력값 4와 2를 입력했습니다.

c.type로 low가 출력됐고, 6이 덧셈 결과로 출력한 것을 확인할 수 있습니다.


이제 상속의 개념을 이용해서 Calculate 클래스에 뺄셈과 곱셈의 기능을 추가한 Calculate_1 클래스를 만들어보겠습니다.


상속을 하는 방법은 

class 자식클래스(부모클래스) 로 괄호 안에 상속할 클래스명을 입력하면 됩니다.


type를 "high"로 정의한 후, sub() 함수와 mul() 함수 기능을 추가했습니다.


Calculate_1의 인스턴스로 c1을 생성했고 입력값 2개를 입력했습니다. 


여기서 Calculate_1에는 초기화 설정 함수가 없음에도 오류가 안 난 것을 확인할 수 있는데, 

이는 부모클래스인 Calculate로 부터 기능을 물려받았기 때문입니다.


Calculate의 기능 c1.sum() 함수 또한 실행된 것을 확인할 수 있습니다.




2. 메소드 오버라이딩(Method Overriding)


상속의 개념 중 하나인 메소드 오버라이딩은 자식클래스가 자신의 부모클래스들 중 하나에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것 입니다.


클래스를 만들다 보면 메소드의 이름은 같지만 기능을 다르게 해야 할 때가 있는데, 이 때 메소드 오버라이딩 개념을 적용하면 됩니다.


밑의 예제와 함께 보면 쉽게 파악할 수 있습니다.

Calculate_1을 부모클래스로써 상속을 받은 Calculate_2 클래스를 정의했습니다.

type를 Very high라고 입력한 후, div() 함수를 통해 나눗셈 기능을 추가하였습니다. 


여기서 mul() 함수는 이미 Calculate_1에 있던 함수인데 곱셈결과를 좀 더 친절하게 출력하기 위해 다시 재정의 하고 있습니다.

그 결과 오버라이딩한 mul() 함수의 기능대로 출력된 것을 확인할 수 있습니다.






수고하셨습니다~






댓글3

  • 토미 2017.04.25 13:01

    이해가 쏙쏙 되네요 정말 좋은 글 감사합니다 !! 계속 보겠습니다 !!
    답글

  • maro 2019.06.07 22:12

    오버라이딩 개념이 부모 클래스의 함수를 덮어 써서 새롭게 정의하는것 아닌가요? 새로운 div같은 함수를 정의하는게 아니고여
    답글

    • JKyun 2019.07.02 18:53 신고

      상속을 받아서 기존의 함수를 다시 정의(customize)를 해도 되고 그 이외에 새로운 메서드를 정의하는 것도 포함하지 않을까요?