객체지향 프로그래밍: 클래스
클래스를 사용하여 특정 객체를 표현할 수 있다.
- 클래스는 속성과 행동을 포함하는 객체를 정의한다.
- 속성은 데이터의 요소이고 함수는 특정 작업을 수행한다.
- 클래스에는 객체의 초기 상태를 설정하는 생성자가 존재한다.
- 클래스는 템플릿으로 쉽게 재사용할 수 있다.
객체지향 프로그래밍: 메소드(함수)
객체지향 프로그래밍에서 메소드의 역할
- 객체의 행위를 나타낸다.
- 속성을 이용하고 조작하여 task를 수행한다.
OOP의 주요 기능: 캡슐화
- 객체의 기능과 상태 정보를 외부로부터 은닉
- 사용자는 객체의 내부 구조 및 상태를 직접 수정할 수 없고 대신 수정을 요청할 수 있다.
- 요청의 종류에 따라 객체는 getter, setter와 같은 특수 함수를 사용하여 내부 상태를 변경
- 파이썬에는 캡슐화에 필요한 접근 제어 키워드(public, private, protected)가 없기 때문에 캡슐화의 개념이 존재하지 않는다.
- 함수나 변수 앞에 __를 붙여 접근 제어 권한을 부여할 수 있다.
OOP의 주요 기능: 상속
상속이란
- 어떤 클래스의 기능이 부모 클래스로부터 파생되는 것을 의미한다.
- 부모 클래스에서 정의된 함수를 재사용할 수 있고, 기본기능을 확장할 수 있다.
- 파이썬에서는 다중 상속을 지원한다.
- 클래스간 계층 구조 형성
- 코드의 재사용이 가능하기 때문에 효율성이 증대된다.
OOP의 주요 기능: 추상화
- 공통적인 속성을 묶어서 정의 하는 것
- 공통적인 속성 즉, 상위의 개념에서 추상화가 주로 사용
- 상위 개념을 추상화로 정의하고 의존되는 속성을 다른 클래스로 정의하는 것이 주요한 사용 중 하나.

(위 사진에서 알 수 있듯, 개념적인 '장비'를 추상화 시켜 기본적인 뼈대를 구성하고, 구체적인 기계(장비의 종류)를 클래스를 이용해 하는 방식으로 사용.)
OOP의 주요 기능: 컴포지션
- 객체나 클래스를 더 복잡한 자료 구조나 모듈로 묶는 행위
- 컴포지션을 통해 특정ㅇ 객체는 다른 모듈의 함수를 호출 할 숫 있다.
- 즉, 상속 없이 외부 기능을 사용할 수 있다.
- Loose Coupling(느슨한 결합): 시스템 내 여러 부분이 독립적으로 존재하며, 변경사항이 한부분에 영향을 미치지 않는다.
has-a와 is-a 관계
해당 관계는 다음과 같이 비교, 정의할 수 있다.
