패키지 구조

지금까지 우리는 하나의 파일 안에서 모든 코드를 작성했습니다. 하지만 실제로 프로그램을 만들다 보면, 코드가 수백, 수천 줄이 되기도 합니다. 이때 모든 코드를 한 파일에 넣으면 어떨까요?

찾기도 힘들고, 고치기도 힘들고, 엉망진창이 됩니다.

그래서 프로그래머들은 코드를 여러 파일과 폴더로 나누어 정리합니다. 파이썬에서는 이것을 **모듈(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 = 다른 사람이 만든 패키지를 설치하는 도구

코드를 깔끔하게 정리하는 습관은 프로그래머로서 가장 중요한 덕목 중 하나입니다!