Python

파이썬을 배워보자!{클래스와 객체(상속)}

25G 2021. 4. 15. 22:51

안녕하세요~~! 여러분 클래스와 객체 정말 끝도 없죠? ㅋㅋㅋㅋ저도 그렇게 생각합니다. 하지만 하나하나 클래스와 객체에 대한 개념을 익혀가시다 보면 제가 주저리주저리 한 것보다 그렇게 내용이 많지 않을 겁니다 ㅎㅎ

오늘 말씀드려볼 내용은 "상속" 이라고 하는 내용입니다. 이름부터 뭔가~싶으시죠?? 하지만 여러분 저도 공부를 해나가는 사람으로서 공부하면서 느껴가는 거지만 프로그래밍 언어나 컴퓨터도 결국엔 사람 이 만들었다는 거죠.

클래스니~객체니 상속이니~ 뭐 이런 어려운 개념들이 존재하는 것들도 결국엔 사람의 불편함을 해결해 주기 위해 나온 방법들이니

어렵고 힘들고 이해가 안되더라도 한번 알아놓는다면 프로그래밍 언어 개발자들이 좀 더 편하게 개발을 할 수 있기를 하는 마음에서 생긴 이 언어들을 편하게 잘 쓰게 된다는 거죠ㅎㅎ 그렇게 생각하면 아주 조금이나마 공부에 박차를 가하 실수 있지 않은가 생각합니다

 

자! 잔소리는 여기까지 하고!

클래스얘기하다가 갑자기 상속이라니 참 어이가 없죠?? 저도 그랬어요 ㅋㅋㅋ 

근데 다들 "상속"이라고 얘기를 하고 이해를 하지만 이는 잘못됐다기보다는 영어에서 한글로 번역하면서 생긴 오해라고 합니다. 상속을 알려드리기 전에 좀 더 이해를 돕기 위한 말씀을 드리면 상속을 부모자식간에 그러한 상속이 아닌 재사용과 확장의 개념 으로 대입해서 보시면 조금 더 이해하기 편하실 겁니다

 

상속

상속은 클래스와 함수로는 객체지향적인 코드를 작성하는데 많은 어려움이 있기 때문에 좀 더 효율적인 코딩을 위해서 나타난 녀석이라 생각하시면 됩니다

 

person클래스와

PersonStudent클래스가 있습니다

자 이 두가지의 소스코드들을 보면 겹쳐있는 내용도 많고 그냥 클래스 없이 작성하는 소스코드 보다야 낫겠지만 결국 프로그램을 유지 보수하고 업데이트를 한다는 계념에서 보면 이 반복되는 코드들이 개발을 더 복잡하고 실수도 많이 하게 만들며 불편하게 합니다. 위 소스코드는 몇 줄 안 되는 간단한 코드들이지만 실제 프로그램은 수백수천 줄이 될 수도 있는데 하나하나 다 읽어가며 수정하는 게 얼마나 힘들겠어요 ㅠㅠ

하지만 자세히 보면 위 두 클래스가 겹치는게 많다는 말은 결국 공통점이 있다 라는 것이고 그 공통점을 묶어서 소스코드의 작성을 편하게 할 수 있다면 참 좋겠죠? 

이럴 때 객체지향에서 빠질 수 없는 "상속"을 쓰면 아주 편하게 해결할 수 있습니다

문법부터 보시죠

 

class 클래스명(상속 클래스명) :

         속성(생성자)(객체)

         기능(메서드)

 

참 쉽죠 제가 설명을 장황해서 그렇지 문법은 별것 없습니다

하지만 설명을 장황하게 한 것은 이것을 어떻게 사용할지가 중요하기 때문이죠

-상속은 위와 같이 공통된 특징을 가진 클래스들이 있을 때 사용해야 합니다

-상속은 하위 클래스가 다시 그 밑에 하위 클래스를 둘 수도 있습니다.

-공통된 특징을 가진 클래스들 중에서 가장 핵심 내용을 가지고 있는 클래스를 상위 클래스로 합니다

-상위 클래스가 하위클래스에게 상속을 하면 하위클래스는 상위클래스가 가지고 있는 "속성"과 "기능"을 사용할 수 있게 됩니다

 

위의 규칙들을 아주 간단하게 설명하자면

하위 클래스는 상위 클래스이다

사실 이 말이 다입니다 잘 이해가 안 될 때는 저 말을 떠올려 각자의 위치에 대입시켜 보세요

예를 들어 동물이란 상위 클래스가 있고 포유류라는 하위 클래스가 있으며 포유류의 하위 클래스로 고래라는 클래스가 있다고 생각해 보세요

위 같은 클래스들끼리의 상속 관계도가 있다고 했을 때

포유류는 동물이다(말이 됨)

고래는 포유류다(말이 됨)

고래는 동물이다(말이 됨)

자!! 이제 간단하죠? 저 마법의 문자이면 상속의 아주 큰 개념을 이해하실 수 있습니다.

자 상속을 알게 되면 위에 있는 person클래스와 personstudent클래스의 복잡한 코드를 이렇게 쉽게 정리할 수 있습니다. 객체지향언어가 사람을 위해 만들어진 언어라는 게 이해가 가시나요?? 

좀 더 상세하게 말씀을 드리자면 person클래스에 있는 속성과 기능들을 personstudent클래스가 재사용을 하며 PersonStudent만의 새로운 기능을 추가함으로써 person클래스보다 확장된 하위 클래스를 보실 수 있는 것입니다

person클래스에 기능을 다 가져다 쓰는거니 PersonStudent클래스에서는 굳이 정의를 할 필요가 없는 것입니다

 

마지막으로 한 가지 더 유의할 사항은! Person클래스에는 def study(self):라는 기능이 당연히 없습니다 그 기능은 Person클래스에서 확장된 하위 클래스에서 정의된 메서드이기 때문이죠 그렇기 때문에 당연히 Person클래스는 def study(slef):기능을 사용할 수 없습니다!

 

자! 여러분 상속에 대해서 얘기를 해 보았는데요!

결국에 우리가 사용하는 객체지향 언어라는 것은 참 간단하면서도 심오한 뜻을 가지고 있습니다. 그렇기에 그것을 이용하고 이해하고 사용하기 위해서는 많은 경험과 공부가 동반되어야 하는 것 같습니다! 

객체지향의 개념만을 다루는 책이 따로 있을 정도이니까요!

그러니 제가 말한 것이 다가 아닙니다!

 

자 그럼 오늘도 긴 글 읽어주셔서 감사합니다

안녕~~