지난 포스팅에 파이썬 클래스의 상속하는 이유와 방법에 대해 공부 해봤습니다.
이번 포스팅에서는 메서드 오버라이딩 개념에 대해 공부해 보도록 하겠습니다.
- 45. 파이썬 – 클래스의 상속
- 44. 파이썬 – 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)
- 43. 파이썬 – 더하기 기능 만들기
- VMware 공유폴더 설정(VMware tools) v16.1
- 워드프레스에서 포토샵.플러그인 없이 포토스케이프(3.7)로 워터마크 만들기
파이썬 클래스
메서드 오버라이딩
먼저 이전에 만들었던 사칙연산 클래스인 Four_Calculator 클래스를 예를 들어 실행해 보겠습니다.
>>> a = Four_Calculator(4, 0)
>>> a.divide()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 18, in divide
ZeroDivisionError: division by zero
Four_Calculator 클래스의 a 객체에 숫자 4 와 0 을 입력하고 divide(나누기) 메서드를 호출하게 되면 숫자 4 를 0 으로 나누려는 시도 때문에 이처럼 ZeroDivisionError 오류가 발생하게 됩니다.
그럼 여기서 0 으로 나눌 때 오류가 아니라 0 을 리턴하도록 만들려면 어떻게 해야 할까요?
아래처럼 Four_Calculator 클래스를 상속하는 Safe_Four_Calculator 클래스를 만들어 보도록 하겠습니다.
>>> class Safe_Four_Calculator(Four_Calculator):
... def divide(self):
... if self.second == 0: # 나누는 숫자가 0 인 경우 0 을 리턴하도록 수정
... return 0
... else:
... return self.first / self.second
...
>>>
Safe_Four_Calculator 클래스는 Four_Calculator 클래스에 있는 divide 메서드와 동일한 이름으로 다시 만들었습니다.
이런 식으로 부모 클래스(상속한 클래스) 에 있는 메서드를 같은 이름으로 다시 생성하는 것을 메서드 오버라이딩(Overriding, 덮어쓰기) 라고 합니다.
이런 식으로 메서드를 오버라이딩 하게 되면 부모클래스의 메서드 대신해서 오버라이딩한 메서드가 호출되게 됩니다.
이전 포스팅에서 진행했던 상속과는 차이가 있습니다.
Safe_Four_Calculator 클래스에 메서드 오버라이딩 한 divide 메서드는 나눌려고 하는 값이 숫자 0 인 경우에는 0 을 리턴하도록 수정되어 있습니다.
이제 다시 Four_Calculator 클래스 대신 Safe_Four_Calculator 클래스를 사용하여 아까 ZeroDivisionError 가 났던 예제를 수행해 보겠습니다.
>>> a = Safe_Four_Calculator(4, 0)
>>> a.divide()
0
앞서 진행했던 Four_Calculator 클래스와는 다르게 ZeroDivisionError 가 발생하지 않고 우리가 의도한 대로 0 으로 나누려고 하면 0 이 리턴 되는 것을 확인 할 수 있습니다.
여기까지 파이썬 클래스의 메서드 오버라이딩 에 대해 공부해 봤습니다.
메서드 오버라이딩과 클래스의 상속은 비슷하기는 하지만
클래스의 상속같은 경우는 기존 클래스의 기능을 유지한 채 기능을 확장 하는 역할을 했다면
메서드 오버라이딩의 경우 동일한 이름의 메서드를 만들어서 기능을 덮어 씌우는 역할을 한다고 보시면 될 거 같습니다.
메서드 오버라이딩을 하게 되면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출 된다는 것도 필히 염두해 두어야 겠습니다.
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
