- 패키지
모듈을 묶어서 관리하자!
패키지를 이용하면 관련 있는 모듈을 그룹으로 관리할 수 있다.
# CalculatorForInt 패키지의 모듈을 불러오는 부분
from CalculatorForInt import addCal
from CalculatorForInt import subCal
from CalculatorForInt import mulCal
from CalculatorForInt import divCal
print(addCal.add(10, 20))
print(subCal.sub(10, 20))
print(mulCal.mul(10, 20))
print(divCal.div(10, 20))
# CalculatorForFloat 패키지의 모듈을 불러오는 부분
from CalculatorForFloat import addCal
from CalculatorForFloat import subCal
from CalculatorForFloat import mulCal
from CalculatorForFloat import divCal
print(addCal.add(10, 20))
print(subCal.sub(10, 20))
print(mulCal.mul(10, 20))
print(divCal.div(10, 20))
- site-packages
어디서나 접근 가능한 패키지를 만들자!
site-package에 있는 모듈은 어디서나 사용할 수 있다.
- import sys
sys모듈은 시스템에 대한 간략한 정보를 가지고 있는 모듈
- sys.path
sys모듈의 path는 모듈들의 경로를 알려준다
for path in sys.path:
print(path)
venv ( virtual enviroment ) 가상환경
from calculator import cal
print(f'cal.add(10, 20): {cal.add(10, 20)}')
print(f'cal.sub(10, 20): {cal.sub(10, 20)}')
print(f'cal.mul(10, 20): {cal.mul(10, 20)}')
print(f'cal.div(10, 20): {cal.div(10, 20)}')
- 실습
site-packages에 약수와 소수를 리스트로 반환하는 모듈을 만들어보자.
약수와 소수 리스트 반환 모듈 만들어 보기
- 자주 사용하는 모듈
수학, 난수, 시간 모듈은 코딩할 때 유용하게 사용된다.
- 수학 관련 함수
합 (sum)
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'sum(listVar): {sum(listVar)}')
최댓값 (max)
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'max(listVar): {max(listVar)}')
최솟값 (min)
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'max(listVar): {min(listVar)}')
거듭제곱 (pow)
print(f'pow(13, 2): {pow(13, 2)}') # 13의 2제곱
print(f'pow(13, 3): {pow(13, 3)}')
print(f'pow(13, 4): {pow(13, 4)}')
반올림 (round)
print(f'round(13, 2): {round(3.141592, 1)}') # 소수점 첫 째 자리까지
print(f'round(13, 2): {round(3.141592, 2)}') # 소수점 둘 째 자리까지
print(f'round(13, 2): {round(3.141592, 3)}') # 소수점 셋 째 자리까지
print(f'round(13, 2): {round(3.141592, 4)}') # 소수점 넷 째 자리까지
print(f'round(13, 2): {round(3.141592, 5)}') # 소수점 다섯 째 자리까지
- math 모듈 (수학 관련 모듈)
import math
# 절대값 ( math.fabs() )
print(f'math.fabs(-10): {math.fabs(-10)}')
print(f'math.fabs(-0.12895): {math.fabs(-0.12895)}')
# 올림 ( math.ceil )
print(f'math.ceil(5.21): {math.ceil(5.21)}')
print(f'math.ceil(-5.21): {math.ceil(-5.21)}')
# 내림 ( math.floor )
print(f'math.floor(5.21): {math.floor(5.21)}')
print(f'math.floor(-5.21): {math.floor(-5.21)}')
# 버림 ( math.trunc )
print(f'math.trunc(5.21): {math.trunc(5.21)}')
print(f'math.trunc(-5.21): {math.trunc(-5.21)}')
# 최대공약수( math.gcd )
print(f'math.gcd(14, 21): {math.gcd(14, 21)}')
# 팩토리얼( math.factorial )
print(f'math.factorial(10): {math.factorial(10)}')
# 제곱근( math.sqrt )
print(f'math.sqrt(4): {math.sqrt(4)}')
print(f'math.sqrt(12): {math.sqrt(12)}')
- 시간과 날짜 관련 모듈
import time
lt = time.localtime()
print(f'time.localtime(): {lt}') # 현재 시스템의 시간 반환
print(f'lt.tm_year(): {lt.tm_year}')
print(f'time.lt.tm_mon(): {lt.tm_mon}')
print(f'time.lt.tm_mday(): {lt.tm_mday}')
print(f'time.lt.tm_hour(): {lt.tm_hour}')
print(f'time.lt.tm_min(): {lt.tm_min}')
print(f'time.lt.tm_sec(): {lt.tm_sec}')
print(f'time.lt.tm_wday(): {lt.tm_wday}') # 요일을 나타내면 0부터 시작
- 객체지향 프로그래밍
객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
객체(object) = 속성(Attribute) + 기능(Function)
- 예시
계산기(객체) / 속성: 숫자 / 기능: 덧셈, 뺄셈, 등등
자동차(객체) / 속성: 색상, 길이, 가격 / 기능: 전진, 후진, 정지 등등
- 객체 만들기(생성)
객체는 클래스에서 생성된다.
자동차(클래스) / 속성: 색상, 길이, 가격 / 기능: 전진, 후진, 정지 등등
자동차(클래스) → 객체 생성 → 자동차 객체1, 자동차 객체2, 자동차 객체3, 자동차 객체4, 자동차 객체5
- 객체 사용의 장점
코드 재사용, 모듈화에 좋다.
- 예시
자동차A 배터리 일체형 → 부품 결합도 높음 → 배터리가 소모되면 자동차까지 바꿔야한다!
자동차B 배터리 교체형 → 부품 결합도 낮음 → 소프트웨어 적으로 가장 이상적! 모듈을 교체하여 사용할 수 있기 때문!
자동차C 배터리 충전형 → 부품 결합도 높음 → 충전시간이 필요하다!
- 클래스 만들기
클래스는 class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다.
class Car: # 클래스 선언 (클래스는 첫 글자를 대문자로 한다)
def __init__(self, color, length): #속성 선언
self.color = color
self.length = length
def doStop(self): # 기능 선언
print('STOP!!')
def doStart(self): # 기능 선언
print('START!!')
def printCarInfo(self):
print(f'self.color: {self.color}')
print(f'self.length: {self.length}')
# 객체는 클래스의 생성자를 호출한다.
# 객체 2개 생성
car1 = Car('red', 200)
car2 = Car('blue', 300)
car1.printCarInfo()
car2.printCarInfo()
car1.doStop()
car1.doStart()
- 실습
비행기 클래스를 만들고 비행기 객체 5개를 생성해 보자.
class AirPlain: # 클래스 선언 (클래스는 첫 글자를 대문자로 한다)
def __init__(self, color, length, weight): #속성 선언
self.color = color
self.length = length
self.weight = weight
def doLanding(self): # 기능 선언
print('착륙!!')
def doTakeOff(self): # 기능 선언
print('이륙!!')
def printAirInfo(self):
print(f'비행기 색상: {self.color}')
print(f'비행기 길이: {self.length}')
print(f'비행기 무게: {self.weight}')
# 객체는 클래스의 생성자를 호출한다.
# 객체 2개 생성
airPlain1 = AirPlain('red', 100, 1000)
airPlain2 = AirPlain('green', 200, 1000)
airPlain3 = AirPlain('blue', 300, 1000)
airPlain4 = AirPlain('yellow', 400, 1000)
airPlain5 = AirPlain('white', 500, 1000)
airPlain1.printAirInfo()
airPlain2.printAirInfo()
airPlain3.printAirInfo()
airPlain4.printAirInfo()
airPlain5.printAirInfo()
airPlain1.doTakeOff()
답안 코드와 비교 해보기
- 객체 속성 변경
객체 속성은 변경할 수 있다.
Class는 대략적 완성 후 실행 해보며 완성해 간다.
class NewGenerationPC:
def __init__(self, name, cpu, memory, ssd):
self.name = name
self.cpu = cpu
self.memory = memory
self.ssd = ssd
def doExcel(self):
print('EXCLE RUN!!')
def doPhotoshop(self):
print('PHOTOSHOP RUN!!')
def printPCInfo(self):
print(f'self.name : {self.name}')
print(f'self.cpu : {self.cpu}')
print(f'self.memory : {self.memory}')
print(f'self.ssd : {self.ssd}')
myPC = NewGenerationPC('myPc', 'i5', '16G', '256G')
myPC.printPCInfo()
friendPC = NewGenerationPC('friendPC', 'i7', '32G', '512G')
friendPC.printPCInfo()
myPC.cpu = 'i9' # cpu 변경
myPC.memory = '64G'
myPC.ssd = '1T'
myPC.printPCInfo()
- 실습
계산기 클래스를 만들고 사칙연산을 실행해 보자.
class Calculator:
def __init__(self):
self.number1 = 0
self.number2 = 0
self.result = 0
def add(self):
self.result = self.number1 + self.number2
return self.result
def sub(self):
self.result = self.number1 - self.number2
return self.result
def mul(self):
self.result = self.number1 * self.number2
return self.result
def div(self):
self.result = self.number1 / self.number2
return self.result
Calculator.number1 = 10
Calculator.number2 = 20
Calculator.add()
이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.