Topic 4: 나만의 모듈 만들기 🛠️
🎯 학습 목표
직접 모듈을 만들어서 코드를 재사용하는 방법을 배워요!
- 모듈 파일 만들기
- 다른 파일에서 모듈 import하기
- 모듈을 체계적으로 관리하기
🏗️ 첫 번째 모듈 만들기
1. 모듈 파일 생성
calculator.py
파일을 만들어요:
# calculator.py
"""간단한 계산기 모듈"""
def add(a, b):
"""두 수를 더하는 함수"""
return a + b
def subtract(a, b):
"""두 수를 빼는 함수"""
return a - b
def multiply(a, b):
"""두 수를 곱하는 함수"""
return a * b
def divide(a, b):
"""두 수를 나누는 함수"""
if b == 0:
return "0으로 나눌 수 없어요!"
return a / b
# 모듈 정보
version = "1.0"
author = "나"
2. 모듈 사용하기
main.py
파일에서 사용:
# main.py
import calculator
# 모듈의 함수 사용
result1 = calculator.add(10, 5)
print(f"10 + 5 = {result1}")
result2 = calculator.multiply(3, 4)
print(f"3 × 4 = {result2}")
# 모듈의 변수 사용
print(f"계산기 버전: {calculator.version}")
🎨 실용적인 모듈 만들기
게임 유틸리티 모듈
game_utils.py
파일:
# game_utils.py
"""게임 개발에 유용한 유틸리티 모듈"""
import random
def roll_dice(sides=6):
"""주사위를 굴리는 함수"""
return random.randint(1, sides)
def flip_coin():
"""동전 던지기"""
return random.choice(["앞면", "뒷면"])
def draw_card():
"""카드 한 장 뽑기"""
suits = ["♠", "♥", "♦", "♣"]
ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
suit = random.choice(suits)
rank = random.choice(ranks)
return f"{suit}{rank}"
def create_character(name, job="전사"):
"""게임 캐릭터 생성"""
stats = {
"이름": name,
"직업": job,
"레벨": 1,
"체력": random.randint(80, 120),
"공격력": random.randint(10, 20),
"방어력": random.randint(5, 15)
}
return stats
# 게임 설정
MAX_LEVEL = 99
JOBS = ["전사", "마법사", "궁수", "도적"]
사용 예시:
# game.py
import game_utils
# 주사위 게임
print("🎲 주사위 게임")
player_roll = game_utils.roll_dice()
computer_roll = game_utils.roll_dice()
print(f"나: {player_roll}")
print(f"컴퓨터: {computer_roll}")
if player_roll > computer_roll:
print("내가 이겼다! 🎉")
elif player_roll < computer_roll:
print("컴퓨터가 이겼다... 😢")
else:
print("비겼다! 🤝")
# 캐릭터 생성
print("\n🧙 캐릭터 생성")
my_character = game_utils.create_character("용사", "전사")
for key, value in my_character.items():
print(f"{key}: {value}")
📁 모듈 구조화하기
여러 파일로 분리
프로젝트 구조:
my_project/
│
├── main.py
├── utils/
│ ├── __init__.py (빈 파일)
│ ├── math_utils.py
│ └── string_utils.py
utils/math_utils.py
:
# utils/math_utils.py
"""수학 관련 유틸리티"""
def factorial(n):
"""팩토리얼 계산"""
if n <= 1:
return 1
return n * factorial(n - 1)
def is_prime(n):
"""소수 판별"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
utils/string_utils.py
:
# utils/string_utils.py
"""문자열 관련 유틸리티"""
def reverse_string(text):
"""문자열 뒤집기"""
return text[::-1]
def is_palindrome(text):
"""회문 검사"""
clean_text = text.lower().replace(" ", "")
return clean_text == clean_text[::-1]
def count_vowels(text):
"""모음 개수 세기"""
vowels = "aeiouAEIOU"
return sum(1 for char in text if char in vowels)
사용하기:
# main.py
from utils import math_utils, string_utils
# 수학 유틸리티 사용
print(f"5! = {math_utils.factorial(5)}")
print(f"17은 소수? {math_utils.is_prime(17)}")
# 문자열 유틸리티 사용
text = "Hello World"
print(f"'{text}' 뒤집기: {string_utils.reverse_string(text)}")
print(f"모음 개수: {string_utils.count_vowels(text)}")
🌟 if __name__ == "__main__"
이해하기
모듈이 직접 실행될 때만 특정 코드를 실행하고 싶을 때 사용해요:
# my_module.py
def greet(name):
return f"안녕하세요, {name}님!"
def calculate_age(birth_year):
import datetime
current_year = datetime.datetime.now().year
return current_year - birth_year
# 이 부분은 모듈이 직접 실행될 때만 동작
if __name__ == "__main__":
# 모듈 테스트 코드
print("모듈 테스트 시작")
print(greet("철수"))
print(f"2000년생의 나이: {calculate_age(2000)}")
💡 모듈 작성 팁
1. 명확한 이름 사용
# 좋은 예 ✅
def calculate_average(numbers):
return sum(numbers) / len(numbers)
# 나쁜 예 ❌
def calc(n):
return sum(n) / len(n)
2. 문서화 (Docstring)
def find_max_value(numbers):
"""
리스트에서 최대값을 찾는 함수
매개변수:
numbers (list): 숫자 리스트
반환값:
int/float: 최대값
"""
return max(numbers)
3. 에러 처리
def safe_divide(a, b):
"""안전한 나눗셈 함수"""
try:
return a / b
except ZeroDivisionError:
print("0으로 나눌 수 없어요!")
return None
except TypeError:
print("숫자만 입력해주세요!")
return None
💡 퀴즈: 모듈 만들기 이해도 체크
Q1. 모듈 파일의 확장자는?
💡 정답 확인
정답: .py
파이썬 모듈은 일반 파이썬 파일과 같은 .py
확장자를 사용해요!
Q2. if __name__ == "__main__":
의 역할은?
💡 정답 확인
정답: 모듈이 직접 실행될 때만 특정 코드를 실행하게 함
- 모듈로 import될 때는 실행되지 않음
- 파일을 직접 실행할 때만 동작
- 모듈 테스트 코드를 넣기에 좋음
✅ 나만의 모듈 만들기 마스터 체크리스트
✅ 나만의 모듈 만들기 마스터 체크리스트
🚀 다음 단계
모듈과 패키지를 모두 마스터했어요! 🎉
이제 여러분은:
- 모듈을 import해서 사용할 수 있어요
- 유용한 내장 모듈들을 활용할 수 있어요
- pip로 외부 패키지를 설치할 수 있어요
- 나만의 모듈을 만들 수 있어요
다음 유닛에서는 이런 모듈들을 활용해서 파일을 다루는 방법을 배워볼게요!
Last updated on