728x90
01. 라이브러리와 프레임워크
- 라이브러리(library)
- 정상적인 제어를 하는 모듈
- 프레임워크(framework)
- 제어 역전이 발생하는 모듈
제어 역전(IoC; Inversion of Control)
라이브러리 = 정상적인 제어
- 라이브러리는 모듈의 기능을 개발자가 직접 호출
from math import sin, cos, tan, floor, ceil
print(sin(1))
print(cos(1))
print(tan(1))
0.8414709848078965
0.5403023058681398
1.5574077246549023
print(floor(2.5))
print(ceil(2.5))
2
3
프레임워크
- 직접적으로 무언가를 진행하는 코드는 없음
from flask import Flask
##간단한 웹사이트를 만드는 코드
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1>Hello World!</h1>"
app.run()
* Serving Flask app '__main__'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
127.0.0.1 - - [14/Jan/2025 14:09:47] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Jan/2025 14:09:47] "GET /favicon.ico HTTP/1.1" 404 -
- Flask 모듈이 제공하는 명령어를 실행하면 코드를 직접 실행하지 않아도 Flask 모듈 내부에서 서버를 실행한 뒤 지정한 파일을 읽어들여 적절한 상황에 스스로 실행
- 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈을 프레임워크라고 부름
- 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어
- 반대로 개발자가 만든 함수를 모듈이 실행하는 것이 제어 역전
- 제어 역전 여부로 라이브러리와 프레임워크를 구분
02. 모듈 만들기
- 파이썬 파일을 만들고 외부에서 읽어들이게 하면 모듈
- 모듈을 구조화해서 패키지(거대한 모듈)를 만들 수도 있음
__name__ == "__main__"
__name__
- 파이썬 코드 내부에서는 __name__ 이라는 변수를 사용할 수 있음
- 프로그래밍 언어에서는 프로그램의 진입점을 엔트리 포인트(entry point) 또는 메인(main)이라고 부름
- 메인 내부에서의 __name__ 변수의 값은 "__main__"임
__name__
'__main__'
모듈의 __name__
- 엔트리 포인트가 아니지만 엔트리 포인트 파일 내에서 import 되었기 때문에 모듈 내의 코드가 실행됨
- 모듈 내부에서 __name__을 출력하면 모듈의 이름을 나타냄
__name__ 활용
- 엔트리 포인트 파일 내부에서 name 이 "main" 이라는 값을 갖는다는 것을 활용해서 현재 파일이 모듈로 실행되고 있는지, 엔트리 포인트로 실행되는지 확인할 수 있음
03. 패키지
- 모듈이 모여서 구조를 이룬 것
- pip는 python package Index의 줄임말고, 패키지 관리 시스템(Package Management System)
패키지 만들기
- 구성
- module_package(폴더)
- test_package(폴더) : 패키지로 사용할 폴더
- module_a.py
- module_b.py
- main.py : 엔트리 포인트로 사용할 파이썬 파일
- test_package(폴더) : 패키지로 사용할 폴더
- module_package(폴더)
__init__.py 파일
- 패키지를 읽을 때 어떤 처리를 수행해야 하거나 패키지 내부의 모듈들을 한꺼번에 가져오고 싶을 때 패키지 폴더 내부에 __init__.py 파일을 만들어 사용
- 해당 폴더가 패키지임을 알려주고 패키지와 관련된 초기화 처리를 하는 파일
- __all__ 이라는 이름의 리스트를 만들면 이 리스트에 지정한 모듈들이 from 패키지 import * 를 할 때 전부 읽어들여짐
728x90