[9일차-1] 모듈

2026. 6. 1. 22:54KDT/1. Python

# 모듈 Module

  • 관련된 함수, 클래스, 변수들을 하나의 파일(.py)로 묶어 재사용할 수 있도록 만든 코드 단위
  • 기능별로 나누어 관리 가능 -> 가독성, 유지보수성 향상
  • 다른 파일에서도 import문을 통해 불러와 사용 가능

1. 모듈 파일 만들기

  • fruit.py 모듈 파일 만들기
# fruit.py

PI = 3.14

def print_fruit(name):
    print(f"{name}입니다.")

def add_quantity(quantity, amount):
    return quantity + amount

class Fruit:
    def __init__(self, name, quantity):
        self.name = name
        self.quantity = quantity

    def print_info(self):
        print(f"과일 이름: {self.name}")
        print(f"수량: {self.quantity}")

 

2. 다른 파일에서 모듈 사용하기

  • main.py 파일 만들기
  • main.py에서 fruit.py의 함수와 클래스를 사용할 수 있음
# main.py

import fruit

fruit.print_fruit("사과")

result = fruit.add_quantity(10, 5)
print(result)

apple = fruit.Fruit("사과", 10)
apple.print_info()

 

3. 실행하기

  • 터미널에서 cmd로 설정 후 실행
python main.py
  • ipynb에서 셀로 실행해도 사용 가능
from fruit import Fruit, add_quantity

apple = Fruit("사과", 10)
apple.print_info()

print(add_quantity(10, 5))
# 👉 모듈 전체가 아니라 필요한 함수나 클래스만 가져올 수 있음

 

# import 문과 from-import문 차이

  • import : 해당 파일에 모든 함수나 클래스를 사용 가능
    하지만 모든 함수나 클래스를 메모리에 올리므로 메모리 낭비 발생 가능성 존재
  • from-import : 해당 파일에서 필요한 함수나 클래스를 골라서 가져와 사용 가능
    때문에 메모리를 필요한 만큼만 사용 가능

 


# __name__

  • 현재 실행 중인 모듈의 이름을 담고 있는 내장 변수
  • 이 파일이 직접 실행된 것인지 (import 된 것인지) 구분하는 데 사용
  • 만약 직접 실행하면 __name__의 값은 "__main__"이 되고
    다른 파일에서 import 되어 사용되면 해당 모듈의 파일 이름이 들어감

1. 직접 실행

  • 터미널에서 실행
# fruit.py 에다가 아래 내용 추가

def hello():
    print("과일 모듈입니다.")

print("__name__ 값:", __name__)

if __name__ == "__main__":
    print("직접 실행되었습니다.")
    hello()
python fruit.py

# 결과
# __name__ 값: __main__
# 직접 실행되었습니다.
# 과일 모듈입니다.

 

2. 다른 파일에서 import 실행

python main.py

# __name__ 값: fruit

# 패키지 Package

  • 관련된 여러 모듈(.py 파일)을 하나의 폴더로 묶어 계층적으로 관리하는 단위
  • 코드 규모가 커질 때 기능별로 구조를 나누어 정리 및 재사용성 향상
  • 패키지는 디렉토리로 구성
  • 내부에 모듈과 서브패키지를 포함 가능
  • 필요에 따라 __init__.py (정해진 파일명) 파일을 통해 패키지 초기화나 공개 API 정의 가능
  • import package.module처럼 이름공간(namespace)를 구분하여 충돌을 방지하고 깔끔하게 구조화
myproject/
├── main.py
└── fruits/
    ├── __init__.py
    ├── apple.py
    └── banana.py

# random 모듈

  • 무작위 값을 생성할 때 사용하는 표준 라이브러리 모듈
  • 별도 설치 없이 import random으로 사용 가능
  • 임의의 숫자 생성, 리스트에서 랜덤 선택, 데이터 섞기, 난수 범위 지정 등에 자주 사용

1. 자주 사용하는 메서드

# 1. random.random() → 0 이상 1 미만 실수
print("random():", random.random())

# 2. random.randint(a, b) → a 이상 b 이하 정수
print("randint(1, 6):", random.randint(1, 6))

# 3. random.randrange(a, b) → a 이상 b 미만 정수
print("randrange(1, 10):", random.randrange(1, 10))

# 4. random.choice() → 리스트에서 1개 선택
fruits = ["사과", "바나나", "오렌지"]
print("choice:", random.choice(fruits))

# 5. random.sample() → 중복 없이 여러 개 선택
numbers = list(range(1, 11))
print("sample:", random.sample(numbers, 3))

# 6. random.shuffle() → 리스트 섞기
cards = ["A", "K", "Q", "J"]
random.shuffle(cards)
print("shuffle:", cards)

 

2. random.seed()

  •  난수 생성기의 초기값(시드)을 설정하여 동일한 난수 결과를 재현 가능하게 만드는 함수
  • 파이썬의 random은 의사난수(pseudo-random) 사용하므로 시드를 고정하면 실행할 때마다 같은 순서의 난수가 생성
  • 이 기능은 테스트, 디버깅, 머신러닝 실험처럼 결과를 반복 재현해야 하는 상황에서 매우 중요
  • seed 값을 설정하면 그에 대한 랜덤 값이 똑같게 나온다

3. 의사난수(pseudo-random number)

  • 완전히 무작위로 생성된 것이 아님
  • 일정한 알고리즘에 의해 만들어진 "랜덤처럼 보이는 숫자"
  • 이러한 특성 덕분에 결과를 재현할 수 있음
    (테스트나 머신러닝 실험에 매우 유용, 속도도 빠름)
# seed() 없을 때
# 👉 실행할 때마다 결과가 바뀜
print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

# seed() 있을 때
# 👉 결과가 고정됨
random.seed(2026)

print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

# 모듈 설치

1. 가상환경 생성

python -m venv venv

#가상 환경마다 다른 버전의 python에 대해 실행 가능

 

2. 가상환경 활성화

# windows
venv\Scripts\activate 

# mac
source venv/bin/activate

 

3. pip 위치 확인

where pip      # Windows
which pip      # Mac/Linux

# 👉 venv 안 pip인지 확인 (Windows)
# python 설치 시 자동으로 설치
# pip : 파이썬 생태계(패키지를 공유하는 페이지)에서 패키지를 다운로드 & 업로드

 

4. python 경로 확인

where python

# 👉 반드시 venv 경로여야 함

 

5. numpy, pandas 설치

pip install numpy pandas # pip이 다른 python을 가리키고 있을 수도 있음
python -m pip install numpy pandas # 현재 python이 사용하는 환경에 설치됨

 

6. 패키지 목록과 각 버전 확인

  • 현재 환경 기준으로만 보여줌 (전역/다른 venv와 독립)
  • 패키지 이름 + 버전 확인 가능
  • 설치 여부 빠르게 체크 가능
pip list

# requirements.txt

  • 파이썬 프로젝트에서 필요한 외부 패키지와 그 버전을 기록해 두는 파일
  • 동일한 개발 환경을 다른 사람이나 다른 시스템에서도 쉽게 재현 가능

1. requirements.txt 생성

pip freeze > requirements.txt
# 관례적으로 이 파일명을 사용 (다른 파일명 사용해도 무관)

 

2.  requirements.txt 사용 방법

pip install -r requirements.txt
# 다른 환경에서 실행하면 파일에 있는 모든 패키지 자동 설치

* __name__ : 백엔드 공부 시 필요한 내용

 

*모듈 : 파일 각각을 말함

 패키지 : 모듈 파일 묶음