세로형
Recent Posts
Recent Comments
Link
03-28 00:38
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

파이썬(python) 클래스, 객체지향 및 __init__ 공부해보기 본문

python

파이썬(python) 클래스, 객체지향 및 __init__ 공부해보기

이수진의 블로그 2017. 11. 22. 09:48

클래스는 가장 익숙한 언어가 (저 기준으로) 자바입니다

자바는 객체지향 언어의 대표주자로 클래스를 이용해 객체를 생성하고 그것을 이용해서 프로그램을 구성하죠

파이썬도 마찬가지로 클래스가 있습니다.

또한, 마찬가지로 객체지향도 되구요

 

객체지향이라는 것은 프로그래밍이 익숙치 않으신 분들은 이해하기 힘드실 겁니다

그냥 제가 이해한 간단 설명은 이런거에요

화장품을 예를 들어 설명해보죠

스킨 로션을 생성하는 공장 A가 있습니다.

이 A에서 스킨 로션을 계속 생성해줘요

근데 생성하는 스킨 로션이 100% 일치할 수 없습니다

예를 들어 용량이나, 성분이나 브랜드 100% 일치한다고 볼 수 없죠(이니스프리 스킨로션, 더 페이스 샾 스킨 로션 등등요)

이렇게 공장 A가 생성하는 스킨 로션이 바로 객체입니다

그리고 그 객체를 생성해주는 공장 A가 클래스이죠

 

더 쉬운 예는 붕어빵이 있죠

붕어빵 틀이 클래스이고 그 틀을 이용해서 나오는 붕어빵이 하나하나가 객체이죠

붕어빵에 들어있는 팥과 반죽의 비율이 일치하지 않고 다 제각기 다르죠?

어떤건 팥이 많고 어떤건 없고

이러한 특징을 가지고 있는 사물 즉 object가 객체입니다.

 

이해를 못하시면 어쩔 수 없네요 ㅠㅠ

쉽지 않은 개념이에요 ㅎㅎ

 

어쨋든 클래스를 이용해서 파이썬에서 프로그램을 구성할 수 있습니다

바로 실습을 해보죠

 

Calcul이라는 클래스를 만들었습니다.

이 클래스는 계산기 기능을 하는 클래스에요

이 계산기에는 숫자를 셋팅하고 더해주는 기능이 있습니다.

이런 기능을 가진 계산기를 하나 생성할거에요

cal1 = Calcul( )을 통해 객체를 생성합니다

새로운 계산기를 여러분이 만드신거에요!

그리고 이 계산기 안에 있는 num이라는 변수에 접근합니다

접근은 . 을 통해서 접근해요

 

 

그리고 setNum이라는 메소드를 통해 99라는 숫자를 전달해줍니다.

그러면 cal1의 계산기의 num2 값은 99가 됩니다!

그리고 새로운 계산기를 하나 더 만들어보죠

cal2라는 계산기에요(객체가 2개입니다)

이 계산기는 88이라는 값을 가지고 있어요

 

그리고 cal1, cal2를 각각 sum이라는 메소드를 호출해보죠

 

 

자 결과는 이렇게 나오게 됩니다!

둘은 같은 클래스를 참조하지만 엄연히 독립된 객체이기 때문에 둘은 다른 계산기 입니다.

즉 내가 가지고 있는 계산기가 cal1이면 친구가 가지고 있는 계산기는 cal2인거죠!

 

근데 위 사진처럼 파이썬을 하다보면 __init__이라는 함수를 자주 만납니다

이건 뭘까?

 

만약 이 계산기에 반드시! 값을 셋팅해야 한다고 가정해보죠

근데 사람의 실수로 인해 이 값을 셋팅을 못할 수도 있습니다

__init__을 셋팅을 안해주면 이 실수를 막을 수 없죠

하지만 __init__을 해주면 이 셋팅 작업을 무조건 해주어야 합니다

즉 num을 셋팅해야 하는데 무조건! 셋팅해야 한다는거죠

셋팅을 안하면 어떻게 될까요?

 

이렇게 에러를 뿜어댑니다 뭐하냐고 장난하냐고 빨리 셋팅하라고

이런 것을 방지해주기 위해 많이 사용해요!

 

 

실행하면 위 처럼 나오게 됩니다.

 

그리고 상속이라는 개념도 있어요

http://lsjsj92.tistory.com/21?category=753578

이거는 상속이라는 개념을 써놓은 글인데요 자바 기준입니다

어쨋든 개념은 똑같아요

 

자식은 부모에게 상속받는 개념을 컴퓨터에 적용한 것입니다.

자식 클래스는 부모 클래스를 상속받을 수 있는데요

그렇게 되면 자식은 부모의 필드, 메소드를 물려받게 됩니다

 

즉 A라는 클래스에 sum이 있습니다.

B라는 클래스는 mul이 있어요

B라는 클래스에서 sum 기능을 만들고 싶으면 어떻게 할까요?

물론 이건 그냥 간단한 기능이라서 만들면 되는데? 라고 생각할 수도 있어요

하지만, 복잡하면?

그리고 굳이 A라는 클래스에 기능이 있는데 또 만들 필요는 없잖아요

그래서 상속을 합니다.

B클래스는 A클래스를 상속해요

그러면 더하기 기능을 사용할 수 있습니다.

 

그리고 오버라이딩 개념도 있어요

오버라이딩은 부모의 메소드를 자식이 재정의 하는 것입니다.

무슨 말이냐고요?

 

현실 세계를 기준으로 해보죠

저희 부모님은 뛸 수 있습니다.(run)

저도 뛸 수 있어요(run)

이건 상속 받은거죠?

근데 부모님의 run 속도는 40이에요

저의 run 속도는 80이에요

내가 부모님한테 받은 run은 상속 받을 수 있지만 저는 속도가 다르죠

그래서 오버라이딩 합니다.

나만의 함수로 다시 만드는 거에요

 

 

상속은 위처럼 class 클래스이름(상속할 클래스 이름) 으로 진행합니다

Calcul3에는 minus, mul 기능은 있는데 sum이 없어요

sum은 Calcul2에 있습니다.

그래서 상속하게 되면 sum을 사용할 수 있죠

cal4는 Calcul3을 참조하는 객체입니다

그래서 sum을 사용할 수 있죠!

Calcul4는 Calcul2를 마찬가지로 상속합니다.

하지만 calcul2에 있는 sum을 재정의했죠

이게 오버라이딩입니다

 

결과는 아래처럼 나오게 됩니다!

 

여기까지 파이썬 클래스의 상속 및 오버라이딩, __init__에 대해서 공부했습니다!

반응형
그리드형
Comments