앞에서 클래스의 상속에 대해서 알아봤습니다. 상속을 하기 위해서는 부모 클래스와 자식 클래스가 있어야 한다는 걸 보았고, 자식 클래스에게 부모 클래스의 정보를 넘겨주는 방법에 대해서도 알아봤습니다. 그럼 상속을 받을 때 여러 클래스로부터 상속을 받는 것도 가능한데요. 이럴 때 발생할 수 있는 오버 라이딩에 대한 사용법도 알아보죠.
부모 클래스와 자식 클래스의 대한 이해가 없다면 이해하기 힘드니 혹시 클래스 상속에 대해서 잘 모르신다면 아래 링크를 참조하시면 됩니다.
[파이썬 독학] 클래스의 상속 : 자식 클래스와 부모 클래스 (tistory.com)
클래스의 다중 상속
다중 상속이란 여러 부모 클래스로부터 상속받은 경우 다중 상속이라고 합니다. 그러면 다중 상속의 이해를 위해 부모 클래스로 사용될 2개의 클래스를 생성하였습니다.
다음으로 자식 클래스를 생성해야 하는데 다중 상속을 받는 자식 클래스는 다음과 같이 생성합니다.
자식 클래스를 보면 클래스 명인 'order' 옆에 (drink_kind, syrup) 으로 작성된 것을 보시면 이 2개의 클래스를 상속받겠다는 의미입니다. 2개 이상의 클래스를 상속받는 경우 컴마(,)로 구분합니다. 그리고 아래 __init__ 부분을 보시면 부모 클래스에서 사용하고자 하는 변수를 가져옵니다.
다중 상속인 경우는 2개 이상이기 때문에 drink_kind.__init__(self, coffee_yn)과 syrup.__init__(self, syrup_yn) 2개 클래스의 변수들을 불러왔습니다. 그러면 order 클래스를 실행하면 drink_kind의 결과가 생성되고 syrup 클래스가 생성된 결과를 볼 수 있습니다. 이렇게 2개 이상의 클래스를 불러와 사용하는 것을 다중 상속이라고 합니다.
오버라이딩
오버라이딩은 부모 클래스에서 정의된 함수와 자식 클래스에서 동일한 함수명이 있을 때 각각 다르게 동작하는 것을 말합니다. 위의 부모 클래스 예시에서 drink_kind에는 dessert라는 함수가 정의되어 있습니다.
처음 장사를 할 때는 음료의 사이즈와 상관없이 음료 시킨 분이 디저트를 달라고 하면 기본 디저트를 제공했다고 합시다. 그럼 위의 dessert 함수와 같이 생성했어도 큰 문제가 없었겠죠? 하지만 이제 장사가 어느 정도 숙련되었고, 디저트 양이 넉넉한 날에는 음료 주문 시 사이즈업 한 고객에게는 고급 디저트, 그렇지 않은 고객에게는 기본 디저트를 제공하기로 합니다. 그럼 아래 dessert와 같이 정의할 수 있겠죠.
그럼 부모 클래스에 정의된 dessert 함수와 자식 클래스에서 정의된 dessert 함수가 동일한데 어떻게 적용되는 걸까요? 원래는 부모 클래스에 정의된 함수를 가져오지만 동일명의 함수가 있는 경우 자식 클래스에서 정의한 함수가 사용됩니다. 따라서 dessert라는 함수는 부모 클래스명을 이용하여 객체를 생성하고 dessert를 사용하면 부모 클래스에 정의된 함수를, 자식 클래스 명을 이용하여 객체를 생성하고 dessert를 사용하면 자식 클래스에 정의된 명령문을 실행하게 됩니다. 이를 오버라이딩이라고 합니다.
이렇게 작성하고 나니 몇 줄 안돼 보이지만 엄청난 시행착오 끝에 실행되어 생각보다 많은 시간이 걸렸네요... 클래스는 어렵다고 하더니 알아야 할 용어도 많고 정말 어렵습니다.
'방구석코딩 > 파이썬 기초문법' 카테고리의 다른 글
[파이썬 독학] 지역변수와 전역변수 (0) | 2022.08.08 |
---|---|
[파이썬 독학] 아나콘다, 주피터 노트북 단축키 모음 (0) | 2022.08.02 |
[파이썬 독학] 클래스의 상속 : 자식 클래스와 부모 클래스 (0) | 2022.07.26 |
[파이썬 독학] 클래스(class)에서 메서드(method)와 사용법 (0) | 2022.07.24 |
[파이썬 독학] 클래스(class) 멤버변수 : 클래스 내부 / 외부 사용법 (0) | 2022.07.22 |
댓글