본문 바로가기

Data Science/Python

[python] 06.객체지향프로그래밍

객체지향 프로그래밍이란 ?(Object Oriented Programming)
 
프로그램을 구성하는 변수와 함수들에서 서로 연관성있는 것끼리 묶어서 모듈화하는 것을 개발하는 언어들을 객체지향 프로그래밍 언어라고함
 
# Instance(객체)
- 연관성 있는 값들과 그 값들을 처리하는 함수(메소드)들을 묶어서 가지고 있는 것(값).
- 객체의 구성요소
    - 속성(Attribute)
        - 객체의 데이터/상태로 객체를 구성하는 값들.
    - 메소드(method)
        - 객체가 제공하는 기능으로 주로 Attribute들을 처리한다.
 
## Class(클래스) 정의

- class란: 객체의 설계도
    - 동일한 형태의 객체들이 가져야 하는 Attribute와 Method들을 정의 한 것
        - 클래스를 정의할 때 어떤 속성과 메소드를 가지는지 먼저 설계해야 한다.
    - 클래스로 부터 객체(instance)를 생성한 뒤 사용한다.
```python
class 클래스이름:  #선언부
    #클래스 구현
    #메소드들을 정의
```
- 클래스 이름의 관례: 파스칼 표기법-각 단어의 첫글자는 대문자 나머진 소문자로 정의한다.
    - ex) Person, Student, HighSchoolStudent
   
 
 
## 클래스로부터 객체(Instance) 생성
- 클래스는 데이터 타입 instance는 값이다.

```python
변수 = 클래스이름()
```
 
class Person:
    pass
 
### 다중상속과 단일 상속
- 다중상속
    - 여러 클래스로부터 상속할 수 있다
    - 상속 관계가 복잡할 수 있다.
- 단일상속
    - 하나의 클래스로 부터만 상속할 수 있다. = 부모클래스가 1개

   
- 파이썬은 다중상속을 지원한다.
- MRO (Method Resolution Order)
    - 다중상속시 메소드 호출할 때 그 메소드를 찾는 순서.
   ![image.png](attachment:c3be7aab-7414-4c64-98ae-b466f65e4ddb.png)
    1. 자기자신
    2. 상위클래스(하위에서 상위로 올라간다)
        - 다중상속의 경우 먼저 선언한 클래스 부터 찾는다. (왼쪽->오른쪽)
        - 그래도 없으면 object 클래스
- MRO 순서 조회
    - Class이름.mro()