Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/Python

8. Object-oriented Programming in Python

eatplaylove 2024. 3. 15. 12:08

 

OOP가 뭘까? 굉장히 중요하다던데

 

내가 지금껏 정리한 Python은 Procedural Programming이다.(Module/Class 제외)

 

Procedural Programming 이란?

-->변수선언, 자료구조선언, 함수선언 등을 하고 이것들을 사용

 

OOP란?

 

 

- A programming paradigm that relies on the concept of classes and objects

- Class --> 청사진 Blueprint , Object --> Instance들 in class

- ex) students.append("MARCUS") , students.clear()

- 즉, Class 다루는 것! 좀 더 Module화 된 Programming을 하자

 

관련있는 것들끼리는 묶자 --> 그래야 나중에 Debugging이 쉽다

- Combine a group of related variables( ATTRIBUTES ) and functions ( METHODS )

into a unit, which is called an object( ENCAPSULATION)

 

 

Four Principles of OOP

 

  1. Encapsulation

  2. Abstraction

  3. Inheritance

  4. Polymorphism

 

Encapsulation

 

- 서로 관련있는 정보들을(Attributes and Methods) 한 Object에 넣어라

 

- ex) 학생들 성적 계산해보기

 

 

 

- Procedural Programming(PP)의 경우 Function과 Variables가 분리되어 있다.

 

- OOP의 경우 Student Object를 만들어 버려서 그 안에 시험점수 관련 Var과 Func를 전부 넣었다.

 

- 중간에 function에 수정사항이 생겼다면?

 

 

수정이 복잡한 PP의 경우 vs 쉬운 OOP의 경우

 

- OOP Encapsulation --> Object 안에서 "self"를 이용해 간편한 수정이 가능!

 

Abstraction

 

- Class 안에 다양한 Attribute와 Method가 있을텐데, 사용자 입장에선 그 복잡한 것들을 다 알 필요가 없으므로 이것들은 숨기고 High Level Method만 보일 수 있도록 한다.

 

- 위의 경우에서 사용자는 get_total()만 알면 된다. hw, final 어쩌고 알 필요가 없음! 그저 Interface만 심플하다면 만사 OK

 

 

Inheritance

 

- 상속! Parent Class에서 data/behaviors를 상속해서 Child Class에 준다. --> 불필요한 코드생성 막아줌

- ex)

 

Member라는 Parent Class의 속성을 학생/선생이라는 Child Class가 상속한다 --> 코드 Typing 줄어듬

 

- 일반적으론, 부모Class는 자식Class를 여러 개 지원 가능 + 자식Class는 부모Class를 하나만!(경우에 따라 여러 부모 get도 가능은 하다)

 

Polymorphism(Many Forms)

 

- 같은 Method도 Object에 따라 다르게 동작할 수 있다.

 

- ex)

학생/선생의 leave_of_absence() 절차는 다르다. 그러므로 Method이름은 같지만 class 별로 다르게 동작할 수 있도록 허용

 

 

- Method 정의는 Member Class에 되지만 기능은 자식 Class에 따라 다르다.

 

- Object에 따라 method 기능을 다르게 하는 것을 PP로 한다면 --> If/elif/else 를 엄청 써야해서 불편..!

 

 

SW 협업을 위해선 OOP가 매우 매우 중요하다~