Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/Python

Review 5 - Python OOP(Objected Oriented Programming)

eatplaylove 2024. 7. 5. 00:52

https://eglife.tistory.com/68

 

Review 4 - Python File I/O

https://eglife.tistory.com/67 Review 3 - Loop & Set,Tuple,Dictionaries,Mutabilityhttps://eglife.tistory.com/66 Review 2 - Python의 기본 Module , Classhttps://eglife.tistory.com/65 Review 1 - Python programming basics프로그래밍은 안 쓰다 보

eglife.tistory.com

프로그래밍의 꽃! OOP!

 

OOP는 딴 거 없다. 그냥 Class 가지고 노는 걸 말한다.

 

우리가 지금까지 해왔던 건 Procedural Programming 이라고 한다. Functions, Variablem Dats Structure 들이 다 보인다. 하지만 Class 에선 그것들이 Class 안에 다 숨겨져서 저장되기에 OOP구조에선 밖에서 Object들만 보인다.

 

 

OOP는 Class를 쓰기 때문에, Method(Function)를 쓰기 위해서 dot( . ) 을 사용하는 일이 빈번해진다.

 

 

추가로, 기존 방식에선 Function들끼리 서로 연관지어져 있기 때문에 스파게티 코드 형식이 나온다.

 

이는 Error가 발생했을 때, 정확한 Solution을 찾기 어려운 현상을 초래한다.

 

OOP에선 Class 안에 관련 있는 function, variable을 한 곳에 묶어준다. 이 때 Class 안에서

 

Variable = Attribute / Functions = Method 이렇게 불리우고 이 특징들을 포함한 객체를 Object라고 한다.

 

이것을 Encapsulation 이라고 표현한다.

 

Object A에서 Error가 발생 시, 나머지 B/C는 건들지 아니하고 class A만 고치면 된다 : Error Isolation

 

Object Oriented Programming 의 특징 4가지

 

  1. Encapsulation(캡슐:Object안에 넣는다)

  2. Abstraction(감출 건 감추고 단순한 것만 OPEN)

  3. Inheritance(상속)

  4. Polymorphism(다형성 = Many forms, 함수의 이름은 같지만 서로 다른 동작을 하도록 각 Class에서 제)

 

1. Encapsulation

 

Class 안에서 Method를 만들어 줄 때는, Parameter로 Self를 Default로 적어줘야 한다.

 

Var , Function이 바깥 세상에서 돌아다니면 PP에선 내가 그 놈들을 Parameter로 정해줄 때 비로소 Capsule화 시킬 수 있지만 OOP에선 비슷한 것들끼리 Class로 묶어서 Var, Method를 encapsulate 할 수 있다.

 

위 예시에서 만약에 get_total에 hw_lst 를 넣는 걸 까먹었다고 가정해보자. PP에선 고치는 과정이 귀찮아진다.

 

스파게티코드의 개념

만약에 get_total call을 PP에서 100번 했다고 가정하면, hw 하나 고치는데 get_total에서 100번의 error가 발생한다.

 

반면, OOP에선 Class 안 Method에 self.hw attribute만 추가해주면 call 부분에서 error가 발생하지 않는다.

 

함수 Call 할 때, Error가 발생하는 지 유무를 따지자.

 

2. Abstraction

 

User들은 내가 쓰고 있는 Class의 구체적인 특징을 알고싶지 않다. Python에선 Private한 Method를 정의할 때, Class 안에서 Under bar ( _ _ ) 2개를 사용한다.

 

Abstraction은 Interface를 간단하게 해준다. for user! = SIMPLE INTERFACE

App의 버전업데이트를 하는데 User가 사용하는데 지장이 없게 한다. to 개발자! = ISOLATED IMPACT OF CHANGE

 

 

3. Inheritance

 

사실상 typing 하기 귀찮아서 발생하는 일이다. 부모 Class가 자식 Class에게 특성을 상속한다.

( For 중복제거! Eliminate Rebundant )

공통특성 일일히 typing하기 구찮다~

 

Student / Faculty Class에 노랑부분은 중복된 부분이다. 이 부분을 Parent Class로 만들어 효율화시키는 것이 Inheritance!

 

이것이 바로 구조화된 프로그래밍

 

4. Polymorphism ( MANY FORMS )

 

Class 간에 이름은 같지만 동작이 달라야 하는 경우가 있다.( ex : List, int, float에서 같은 더하기지만 더하기 동작이 다름)

 

만약 아래 그림 예제에서 switch affiliation 이라는 method는 Student / Faculty 에서 동작이 미세하게 다를 수 있다. 이 때, 해당 함수는 자녀 Class에서 상속해 갔지만 동작을 다르게 설정해도 그것을 허용해준다. 즉 자녀가 함수를 덮어쓰기 하는 것을 허용한다.

 

 

만약에 Procedural Programming 이면 switch_affiliation 함수의 경우 각 경우마다 if / else를 해야할텐데, 그렇게 할 바에 해당 Method를 각 child class에서 정의하는 것이 낫겠다는 생각이다.

 

위 4가지 항목의 특징 Summary

 

1. 비슷한 정보를 묶는다 : 복잡도 떨어진다, 재사용성 높힘 2. 복잡도 줄이고 디버깅,버전업데이트에 간편 3. 중복코드 작성 막기 4. if/else 복잡구문 막

 

- E. O. D -