# OOP

#### 절차지향 프로그래밍

* 순서대로 작성
* 필드 → 캐릭터 → 전투 수행



#### 객체지향 프로그래밍

* 개체를 코드로 모델링
* 필트 + 캐릭터 → 전투 수행



#### 객체지향 프로그래밍 특징

* 추상화: 객체들의 공통 속성/메서드 정의
  * 클래스 선언 자체가 추상화
* 상속: 하나의 클래스가 가진 속성/메서드를 다른 클래스가 상속 받음
  * 재사용성 증가 = 생산성 증가
* 캡슐화: 구현부 은닉
* 다형성: 다른 방법으로 동작하는 함수를 동일한 함수명으로 호출
  * 오버라이딩: 부모 클래스의 메소드와 같은 이름 및 매개변수를 갖는 코드 재정의
  * 오버로딩: 함수 이름은 같지만 매개변수가 다른 함수를 정의



#### 객체지향 프로그래밍의 장점

1. 상속, 다형성으로 재사용성 증가
2. 객체를 기준으로 코드 작성
3. 캡슐화로 구현부를 은닉해 보안성이 높음(변수 접근은 getter, setter)
4. 추가적인 메모리 요구로 속도가 느릴 수 있음

|    | 절차지향     | 객체지향         |
| -- | -------- | ------------ |
| 언어 | C        | Java, Python |
| 속도 | 상대적으로 빠름 | 상대적으로 느림     |
