본문 바로가기

Programming/Python Tutorials

[PYTHON 3] Tutorials 29. Inheritance - 파이썬의 클래스 상속


안녕하세요. 이번 시간에는 파이썬에서 가장 중요한 것 중 하나인 클래스의 상속에 대해서 알아보고자 합니다. 지난 시간까지 클래스가 어떤 것이며, 어떻게 사용하는지, 왜 사용하는지 등등에 대해서 간략히 소개하였습니다. 이번에는 이 클래스를 보다 실용적으로 사용하기 위해 기존의 만들어진 클래스를 확장하는 개념이라고 이해하시면 좋을것 같습니다.상속, 말 그대로 부모로 부터 물려받는것을 의미합니다. 다수의 기능을 하는 함수를 한데 묶어 하나의 클래스를 만들어 두었는데, 이 클래스가 가지고 있는 모든 기능을 그대로 가져오고, 거기에 더해 기능을 더 첨가하여 더 나은 클래스를 만들어 사용할 때 상속이라는 개념이 유용할 것입니다. 말 보다는 예제를 통해 알아 보도록 하겠습니다.

클래스 이름을 'Parent'로 하는 클래스를 만들어 주었습니다.

그리고 이 클래스는 단순히 라스트 네임(한국식으로는 '성'이 되겠네요.)을 출력하게 하였습니다.

그리고 이번에는 'Child'라고 하는 클래스를 정의하였습니다. 그런데 함수에서는 괄호() 안에 parameter를 넣어서 전달받는 인자를 정의해 주었는데, 클래스에서는 괄호안에 상속받을 부모격에 해당하는 클래스를 넣어 줍니다. 즉, 여기에서는 Parent클래스의 속성을 상속하는 Child 클래스라는 의미가 됩니다.

Child 클래스는 first_name(이름)을 출력하게 하였습니다. 여기에서 알 수 있는 것이 Child 클래스는 first_name을 출력하는 함수를 가지고 있지만, 부모격인 Parent 클래스에 있는 last_name을 출력하는 함수에도 접근을 할 수 있어 last_name 함수도 가지고 있습니다. 이것이 상속이라고 할 수 있습니다.

그럼 실행을 통해 확인해 보겠습니다. 'chris'라고 하는 객체가 Child 클래스의 속성을 띄게 생성하였습니다.

그리고 객체 chris에게 클래스 Child 의 함수인 first_name, last_name을 출력하게 합니다. 여기에서도 볼 수 있듯이 클래스 Child 는 last_name을 출력하는 함수를 가지고 있지 않음에도 그 역할을 수행한다는 것을 알수 있습니다. 왜? 물려 받아서 가지고 있으니까요. 

그럼 위의 결과를 확인해 보겠습니다. 위의 설명과 같이 클래스 Child 가 가지고 있지 않은 함수를 상속을 통해 접근할 수 있게 하였으므로, 그 함수의 역할을 수행하고 있군요.

그리고 한가지 더 언급해야 할 것이 있는데, 상속을 받은 클래스(여기서는 Child 클래스)는 기존에 부모로부터 물려받은 함수를 덮어쓰기(Overwrite)  할 수 있습니다. 부모격에 해당하는 클래스에 있는 함수를 동일한 이름의 함수로 정의 하면서 그 기능을 바꾸어 줄 수 있다는 의미입니다.

아래 그림을 보면, Parent 함수에 존재하는 print_last_name 이라는 함수를 Child 클래스가 상속을 하여 가지고 있는데, 다시 한번 print_last_name 이라는 함수를 정의해 주었습니다. 즉, 기존에 물려받은 것을 사용하지 않고 자체적으로 생성한 것을 만들어 쓰겠다는 것이 됩니다. 이 경우에는 기존의 것을 Overwrite해서 그 역할을 수행하게 되므로 아래와 같이 클래스 Child 에서 자체적으로 정의한 print_last_name 함수가 작동하게 되는 것입니다. 

처음 클래스를 접하면 이게 무슨 소린지 도통 감이 잡히지 않을 수 있습니다. 저 뿐만 아니라 대부분(???) 그러했을테니까요. 그러나 계속 유사한 코드를 접하고 조금씩 코딩을 해보다 보면 감이 잡힐 것입니다. 많은 개발자들이 언급 하는 것 중의 하나가 코딩은 눈과 머리로만 하는게 아니라 직접 타이핑 해가면서 해봐야 안다 라고들 하니까요...^^; 수고하셨습니다.