< 라이브러리와 Module >
- 라이브러리(Library):
- 정의 : 필요한 프로그램을 모아 놓은 집합체, 필요할때 찾아 쓸 수 있도록 모듈화되어 제공되는 프로그램.
- 프로그래밍 언어에 일반적으로 도움말, 설치 파일, 샘플 코드 등을 제공
- 라이브러리는 모듈과 패키지를 총칭한다.
- 모듈 : 개별파일 ex. import(모듈명)
- 패키지 : 모아놓은 폴더 ex. import(패키지명), (모듈명)
- 장점 : 자주 사용하는 기능을 쉽게 재사용할 수 있고 다른 사람과도 공유가능
- 표준 라이브러리 : 기본적으로 설치 될 때 자동으로 설치 되는 라이브러리
- 외부 라이브러리 : 기본 외에 별도로 설치해서 사용하는 라이브러리
- 외부 라이브러리 설치 : pip install 라이브러리명, conda install 라이브러리명
( google에 필요한 라이브러리 찾아서 설치 코드 검색해서 설치하는게 좋음) - 라이브러리 설치 확인 : pip list, conda list 라이브러리명
- 사용법 : import 라이브러리명
- 모듈(Module):
- 모듈은 코드의 일부분을 구성하는 독립적인 단위. 모듈은 특정 작업 또는 기능을 수행하기 위한 코드 블록으로, 관련된 함수, 클래스, 변수, 또는 상수가 포함됨.
- 모듈을 사용하면 코드를 논리적으로 분할하고 재사용 가능한 코드 조각을 만들 수 있습니다. 모듈은 코드의 구조화를 촉진하며 유지 보수와 협업을 용이하게 합니다.
- 만들어진 라이브러리 다운 : https://downloads.apache.org/
- 파이썬의 라이브러리를 설치하게 되면 라이브러리 소스 코드는 보통 "C:\Users\user\AppData\Roaming\Python\Python311\site-packages" 디렉토리 안에 설치가 된다.
- 경로 기억 나지 않을 땐 Site Package 위치 출력하기 : python -m site --user-site
- Python에서 Site Packages가 설치되어 있는 경로를 출력하는 방법입니다. Command Line Tool에서 다음 명령을 입력
- 보통 파이썬 라이브러리 코드를 import를 할 때 아래 기준으로 라이브러리를 찾는다.
- 현재 위치(./)
- " C:\Users\user\AppData\Roaming\Python\Python311\site-packages "
<라이브러리와 프레임워크>
- 라이브러리 : 개발자가 라이브러리의 기능을 수동으로 호출 함 , 제어의 주체가 개발자
- 프레임워크 : 프레임워크는 개발자에게 제공되는 구조와 규칙의 집합, 개발하는 데 필요한 기본 틀을 제공.
제어의 주체가 프레임워크에 있으며, 개발자는 프레임워크가 정의한 규칙을 따라야 한다.
예)Django - 파이썬언어, Ruby on Rails - 루비언어, Spring - 자바언어
< Module와 Import >
- import : import를 사용하면 모듈을 불러올 수 있다. (import는 '수입하다', '가져오다')
컴퓨터에서는 다른 프로그램으로부터 데이터를 갖고 오는 것- 파이썬 import 방법1 : import 모듈 //모듈 전체 가져오기
- 파이썬 import 방법2 : from 모듈 import 이름 // 모듈 내에서 필요한 것만 가져오기
- module : 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일
이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어 사용할 수도 있다. - 모듈 만들기 (cust폴더 > ver1폴더 안 common.py)
#common.py
def print_menu():
return input('''
다음 중에서 하실 작업의 메뉴를 입력하세요.
I - 고객 정보 입력
P - 이전 고객 정보 조회
C - 현재 고객 정보 조회
N - 다음 고객 정보 조회
U - 현재 고객 정보 수정
D - 현재 고객 정보 삭제
Q - 프로그램 종료
''').upper()
#첫번째 파라미터는 로직이어야 한다.(함수) func( 리턴값 T/F로 넘어와야함)
#두번째 파라미터는 인풋에 사용되는 메세지 문자열. msg
def chk_input_data(msg, func):
while True:
x = input(msg).upper()
if func(x):
break
else:
print('잘못 입력하셨습니다. 다시 입력 해 주세요.')
return x
- 모듈 불러오기 (cust폴더 > ver1폴더 안 common.py)
from cust.ver1.common import print_menu
from cust.ver1.common import chk_input_data as check
※ as OO : 알리아스(alias), 모듈의 별명
모듈 별명 설정하면 불러온 모듈 사용 할 때 별명으로 사용 할 수 있다.
from cust.ver1.common import chk_input_data as check
def do_I(customers, index):
print('고객정보 입력')
customer = { 'name':'', 'gender': '', 'email': '', 'year': 0 }
#이름 입력 3글자 이상 체크(람다식)
customer['name'] = check('이름을 입력하세요 : ', lambda x: True if len(x) > 2 else False)
#성별 M, F 입력
customer['gender'] = check('성별 (M/F)를 입력하세요 : ', lambda x: True if x in ('M', 'F') else False)
#이메일 입력
customer['email'] = check('이메일 주소를 입력하세요 : ', lambda x: True if '@' in x else False)
#출생연도 입력
customer['year'] = check('출생년도 4자리 입력하세요 : ', lambda x: True if len(x) == 4 and x.isdigit() else False)
customers.append(customer)
index = len(customers) - 1
return index
※ def do_I(customers, index):
customers는 main에서의 customers 주소값이 넘어오는것 (현재 모듈에서 수정하면 main에서 변경됨)
index는 main에서의 index 값이 넘어오는것 ( 현재 모듈에서 수정해도 main에 변경안됨, 따라서 return index 필요)
※ chk_input_data 함수를 'check'로 별명을 지었기 때문에 코드 안에서 check로 사용할 수 있다.
<TDD와 __name__>
TDD(Test Driven Development) : 테스트 주도적인 개발, 소스코드 작업 전에 테스트 코드를 먼저 작성해 소스 수정에 대한 부담을 덜고 디버깅 시간을 줄이는 방법
if __name__ == '__main__':
main()
- 해석 : __name__이라는 변수의 값이 __main__이라면 아래의 코드를 실행하라.
- 파이썬의 두 가지 특징
1. 들여쓰기를 통해 코드 실행의 레벨을 결정한다.
2. main이 존재하지 않는다. - __name__이라는 내장변수
- 현재 모듈의 이름을 담고있는 내장 변수
- 이 변수는 직접 실행된 모듈의 경우 __main__이라는 값을 가지게 되며,
직접 실행되지 않은 import된 모듈은 모듈의 이름(파일명)을 가지게 된다.
if __name__ == '__main__':
main()
do_I()
#test, 모듈로 실행할 경우 모듈 이름 넣어주기
# if __name__ == '__customer_module__':
※ if문 아래 함수 넣어보면서 test실행해 볼 수 있다.
참고
점프 투 파이썬 - 박응용
728x90
'Back-End > Python' 카테고리의 다른 글
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 2 (3) | 2023.11.08 |
---|---|
[Python][파이썬] 라이브러리 활용 - datetime, timedelta, relativedelta (0) | 2023.11.08 |
[Python][파이썬] 파일 생성하기, pickle 모듈 (1) | 2023.11.07 |
[Python][파이썬] 파이썬 함수 (0) | 2023.11.07 |
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 (4) | 2023.11.06 |