월요일입니다! 😁
객체지향 프로그래밍
추상화 : 객체를 상태 값(변수; property), 행동(함수; method)으로 표현
class는 관련된 속성과 동작을 하나의 범주로 묶어 실세계의 사물을 흉내 낸다.
사물을 분석하여 필요한 속성과 동작을 추출하는 것을 모델링이라고 하며,
모델링된 결과를 클래스로 포장하는 것을 캡슐화라고 한다.
__이름__() : magic function
__init__() : instance를 초기화해주는 역할을 수행하므로 initializer라고 함, 자동으로 호출(명시적으로 호출하지 않음)
self : 현재 사용하는 객체를 지칭하는 변수
pass : 수행할 코드가 없음
이렇게 만들어지는 객체를 다른 말로 instance(class를 기반으로 생성된 메모리 공간)라고 함
class는 여러 데이터 타입을 묶어서 하나의 새로운 데이터 타입(ADT; Abstract Data Type)으로 볼 수 있음
class Car(object):
def __init__(self, car_number, car_price, car_speed): # initializer(인자(매개변수))
# pass 수행할 코드가 없음
self.car_number = car_number # 지역변수(property)
self.car_price = car_price
self.car_speed = car_speed
def go_front(self):
self.car_speed += 10
def __str__(self):
return self.car_number
car1 = Car('123', 1000, 0)
car2 = Car('456', 2000, 20)
print(car1.car_number) # instance(객체).property, 123
print(car1) # 메모리 주소의 hash 값 출력, __str__ 사용하면 hash 값이 아닌 그 결과를 출력, 123
car1.go_front()
print(car1.car_speed) # 10
class variable : stack에 들어가지 않고 class에 속함, 객체의 상위 버전, class 이름으로 사용할 수 있음
instance variable
class Car(object):
is_speeding = 120 # class variable
def __init__(self, car_number, car_price, car_speed):
self.car_number = car_number # instance variable
self.car_price = car_price
self.car_speed = car_speed
def __str__(self):
return self.car_number
def find_speeding(self):
if self.car_speed > self.is_speeding:
return '과속이에요!'
else:
return '정상속도예요!'
car1 = Car('123', 1000, 0)
car2 = Car('456', 2000, 130)
print(car1.is_speeding, Car.is_speeding) # instance or class.(), 120 120
print(car1.find_speeding(), car2.find_speeding()) # 정상속도예요! 과속이에요!
상속(inheritance) : 객체지향을 대표하는 특징 중의 하나, class 계층 구조도
parent(upper, super) class의 특징을 이어받아 child(하위, sub) class를 확장해서 생성하는 기법
class의 관계가 tightly coupled → 유지·보수가 어려움
모든 사용자 정의 class는 object라는 이름의 class를 상속 받음
다형성(Polymorphism) : 상속관계가 성립하면 두 개의 class 간에 특별한 관계(IS-A relationship, Sub class is a Super class)가 성립됨
특정 목적을 위해 Super class를 이용해야 하는데, 그 기능을 더 확장한 Sub class로 대치 가능 → Django
class Unit(object): # object > Unit > Marine
def __init__(self, life):
self.life = life
def show_status(self):
print('생명력 : {}'.format(self.life))
class Marine(Unit):
def __init__(self, life, damage): # 상위 class의 __init__를 호출
super(Marine, self).__init__(life)
self.damage = damage
def show_status(self):
super(Marine, self).show_status()
print('공격력 : {}'.format(self.damage))
marine1 = Marine(100, 200)
marine1.show_status() # 생명력 : 100 공격력 : 200
module : 사용자 정의로 만들 수도 있고 만들어진 걸 사용할 수도 있음, 함수·변수·class를 모아놓은 파일을 지칭함, 확장자명은 .py, 다른 파일에서 사용하기 위해 필요함, 특정 폴더를 module 폴더로 지정하고 그 안에 python module(파일)을 생성하면 가장 쉽게 이용할 수 있음
↑탐색기_내 PC_마우스 우측 클릭_속성 → 고급 시스템 설정 → 시스템 속성_고급 tab_환경 변수 설정을 통해!
시스템 변수 : PYTHONPATH / 값 : C:\python_lib(새로운 폴더 생성 후 시스템 변수 새로 만들어 경로 지정)
import math # 3.141592653589793
print(math.pi)
import my_module as m # 사용자 정의 모듈 / as : alias(별칭)
print(my_module.my_var) # 3.141592
print(m.my_func(10,20)) # 30
from my_module import my_var # from 절을 이용하면 import할 구절을 정할 수 있음
print(my_var) # 3.141592
from my_module import * # * 이용하면 구절 정하지 않아도 사용가능
print(my_var) # 3.141592
import folderA.folderB.module2 as m2 # 폴더 안의 모듈 불러오기 '.'
print(folderA.folderB.module2.module2_var); print(m2.module2_var) # 1000 1000
from folderA.folderB import module2
print(module2.module2_var) # 1000
1. 1/17 월 | 2. 1/18 화 | 3. 1/19 수 | 4. 1/20 목 | 5. 1/21 금 |
취업 특강 | 파이썬 환경 설정 (파이참, 아나콘다, 주피터 노트북) |
파이썬 데이터 타입 (list, tuple) |
파이썬 데이터 타입 (range, string, dictionary, set, bool) |
파이썬 사용자 정의 함수, 객체지향, 사용자 정의 클래스 |
6. 1/24 월 | 7. 1/25 화 | 8. 1/26 수 | 9. 1/27 목 | 10. 1/28 금 |
파이썬 사용자 정의 클래스, 사용자 정의 모듈 |
데이터베이스(MySQL) |
* 코테 문제풀이 다시 시작하자!