가. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 개체(Object)를 소프트웨어의 객체로 모델링하여, 데이터(속성)와 그 데이터를 처리하는 동작(메서드)을 하나의 단위로 묶어 프로그램을 구성하는 프로그래밍 패러다임이다.
나. 전체 프로그램을 구성하는 객체들을 식별하고, 각 객체가 가지는 데이터(속성)과 이를 처리하는 함수(메서드)를 하나의 독립된 단위로 정의한 뒤, 이 단위들을 서로 분리된 모듈로 설계하고 개발한다.
다. 일반적으로 객체 지향 언어에서는 먼저 객체를 어떻게 구성할지 클래스를 정의하고, 그 클래스로부터 객체(Instance)를 생성하여 사용한다.
가. 객체지향 언어에서 데이터인 객체를 어떻게 구성할지 정의한 설계도/템플릿을 클래스 라고 한다.
1. Property/Attribute
- ex) 학생(class) - 학번, 이름, 반, 학년, 학교
-고객 - 고객ID, 패스워드, 이름, email, 주소, 전화번호, point ...
-제품 - 제품번호, 이름, 제조사, 가격, 재고량
나. class 정의 - class는 Data type이고 instance는 value 이
1. class 클래스 이름: #선언부
# 클래스 구현
# 메소드들의 정의
2. 클래스 이름의 관례
- 파스칼 표기법 사용-각 단어의 첫글자는 대문자 나머진 소문자로 정의한다.
- ex) Person, Student, HighSchoolStudent
class Car:
pass
c1 = Car()
c2 = Car()
c3 = Car()
c4 = Car()
다. Method
1. 객체의 state값을 처리하는 함수
2. instance method라고 함.
3. 개별 객체(instance)들은 동일한 instance 메소드를 이용해 자신의 instance 변수의 값들을 처리한다.
가. Property/attribute는 객체의 데이터, 객체를 구성하는 값들, 객체의 속성값들을 의미
1. 값을 저장하므로 변수로 정의(instance 변수)
나. 객체에 속성을 추가, 조회
다. 생성자(Initializer)
1. 객체를 생성할 때 호출하는 특수메소드
2. 구문 : __init__
- def __init__(self [, 매개변수들 선언]):
self.속성명 = 값
class Person2:
def __init__(self, name, age, address):
#instance변수 초기화(값을 대입)
self.name = name
self.age = age
self.address = address
p = Person2("홍길동", 30, "서울")
print(p.name, p.age, p.address)
가. MRO - 다중상속 시 메소드 호출할 때 메소드를 찾는 순서
1. 다중상속의 경우 먼저 선언한 클래스부터 찾는다.(왼 - 오)
종류 많음,,,
나. 구현?
class Parent1:
...
class Parent2:
...
class Sub(Parent1, Parent2):
...
가. super() 내장함수
1. super().get_info()
- 이름, 나이는 Person(부모클래스)의 get_info() 호출
가. 객체와 관련된 특정 상황이 발생하면 호출하도록 정의한 메소드
- 메소드 명이 더블 언더스코어로 시작하고 끝난다.
- ex) `__init__(), __str__()`