패키지 구조
지금까지 우리는 하나의 파일 안에서 모든 코드를 작성했습니다. 하지만 실제로 프로그램을 만들다 보면, 코드가 수백, 수천 줄이 되기도 합니다. 이때 모든 코드를 한 파일에 넣으면 어떨까요?
찾기도 힘들고, 고치기도 힘들고, 엉망진창이 됩니다.
그래서 프로그래머들은 코드를 여러 파일과 폴더로 나누어 정리합니다. 파이썬에서는 이것을 **모듈(Module)**과 **패키지(Package)**라고 부릅니다.
모듈 (Module)
모듈은 아주 간단합니다. 파이썬 파일(.py) 하나가 곧 모듈 하나입니다.
예를 들어, calculator.py라는 파일을 만들면:
# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
이 파일 자체가 calculator라는 이름의 모듈이 됩니다.
다른 파일에서 이 모듈을 가져다 쓸 수 있습니다:
# main.py
import calculator
result = calculator.add(3, 5)
print(result) # 8
import는 “가져오다”라는 뜻입니다. 다른 파일에 있는 코드를 빌려 쓰겠다는 의미죠.
패키지 (Package)
모듈이 여러 개 모이면, 이것들을 폴더로 묶어서 정리할 수 있습니다. 이 폴더가 곧 패키지입니다.
my_project/
├── main.py
└── utils/ ← 이 폴더가 패키지
├── __init__.py ← "이 폴더는 패키지입니다" 라고 알려주는 파일
├── calculator.py ← 모듈
└── greeting.py ← 모듈
__init__.py는 특별한 파일입니다. 이 파일이 있어야 파이썬이 “아, 이 폴더는 그냥 폴더가 아니라 패키지구나!”라고 인식합니다. (내용은 비어있어도 괜찮습니다)
패키지 안의 모듈을 사용하려면:
# main.py
from utils import calculator
result = calculator.add(10, 20)
print(result) # 30
from utils import calculator는 “utils 패키지에서 calculator 모듈을 가져와”라는 뜻입니다.
from과 import의 차이
# 방법 1: 모듈 전체를 가져오기
import calculator
calculator.add(3, 5)
# 방법 2: 특정 함수만 가져오기
from calculator import add
add(3, 5)
# 방법 3: 패키지 안의 모듈 가져오기
from utils import calculator
calculator.add(3, 5)
# 방법 4: 패키지 안의 모듈에서 특정 함수만 가져오기
from utils.calculator import add
add(3, 5)
상황에 따라 편한 방법을 골라 쓰면 됩니다.
실제 프로젝트는 이렇게 생겼습니다
my_game/
├── main.py ← 프로그램 시작점
├── characters/ ← 캐릭터 관련 패키지
│ ├── __init__.py
│ ├── hero.py
│ └── monster.py
├── items/ ← 아이템 관련 패키지
│ ├── __init__.py
│ ├── weapon.py
│ └── potion.py
└── utils/ ← 도구 모음 패키지
├── __init__.py
└── helpers.py
이렇게 관련된 코드끼리 폴더로 묶어두면, 나중에 “캐릭터 관련 코드는 characters 폴더에, 아이템 관련 코드는 items 폴더에 있겠구나!” 하고 바로 찾을 수 있습니다.
이미 만들어진 패키지 사용하기
파이썬의 가장 큰 장점 중 하나는, 전 세계 개발자들이 만들어 놓은 수많은 패키지를 공짜로 가져다 쓸 수 있다는 것입니다.
터미널에서 pip이라는 도구를 사용합니다:
pip install requests
설치 후에는 바로 사용할 수 있습니다:
import requests
response = requests.get("https://example.com")
print(response.status_code)
pip은 파이썬의 패키지 관리자입니다. 앱스토어에서 앱을 다운받듯이, pip으로 패키지를 다운받는다고 생각하면 됩니다.
정리하자면:
- 모듈 = 파이썬 파일 하나 (.py)
- 패키지 = 모듈들을 모아놓은 폴더 (
__init__.py필요) - import = 다른 파일의 코드를 가져다 쓰기
- pip = 다른 사람이 만든 패키지를 설치하는 도구
코드를 깔끔하게 정리하는 습관은 프로그래머로서 가장 중요한 덕목 중 하나입니다!