자주 사용하는 내장 모듈: 파이썬의 강력한 기본 기능 활용
1. 서론: 파이썬, 기본만으로도 충분히 강력하다
이전 챕터에서 우리는 파이썬 모듈의 개념과 import 문을 사용하여 코드를 재사용하는 방법을 배웠습니다. 모듈은 코드를 기능별로 분리하여 관리하고 재사용성을 높이는 데 필수적인 도구입니다. 파이썬은 기본적으로 설치되는 수많은 ‘내장 모듈(Built-in Modules)’을 제공하여, 개발자가 복잡한 기능을 직접 구현할 필요 없이 다양한 작업을 손쉽게 수행할 수 있도록 돕습니다. 예를 들어, 수학 계산, 난수 생성, 시간 처리, 날짜 조작 등은 파이썬 내장 모듈을 통해 매우 간단하게 처리할 수 있습니다. 이 챕터에서는 파이썬에서 가장 자주 사용되는 핵심 내장 모듈인 math, random, time, datetime을 소개하고, 각 모듈의 주요 기능과 활용법에 대해 깊이 있게 알아보겠습니다. 내장 모듈들을 마스터하는 것은 여러분의 파이썬 코딩을 더욱 효율적이고 간결하게 만드는 데 필수적인 단계가 될 것입니다.
2. math 모듈: 수학적 계산의 동반자
math 모듈은 파이썬에서 복잡한 수학적 연산을 수행할 때 사용됩니다. 삼각 함수, 로그 함수, 지수 함수 등 다양한 수학 함수와 상수를 제공합니다.
2.1. 주요 상수
math.pi: 원주율 (π)math.e: 자연로그의 밑 (e)
2.2. 주요 함수
math.sqrt(x): x의 제곱근을 반환합니다.math.pow(x, y): x의 y제곱을 반환합니다. (x ** y와 유사)math.ceil(x): x보다 크거나 같은 가장 작은 정수(올림)를 반환합니다.math.floor(x): x보다 작거나 같은 가장 큰 정수(내림)를 반환합니다.math.fabs(x): x의 절댓값을 반환합니다. (abs()내장 함수와 유사하지만,float를 반환)math.log(x, base): x의 밑이 base인 로그 값을 반환합니다. (base 생략 시 자연로그)math.sin(x),math.cos(x),math.tan(x): 삼각 함수 (라디안 값 사용)
import math
print(f"원주율: {math.pi}") # 출력: 원주율: 3.141592653589793
print(f"자연로그의 밑: {math.e}") # 출력: 자연로그의 밑: 2.718281828459045
print(f"16의 제곱근: {math.sqrt(16)}") # 출력: 16의 제곱근: 4.0
print(f"2의 3제곱: {math.pow(2, 3)}") # 출력: 2의 3제곱: 8.0
print(f"3.14 올림: {math.ceil(3.14)}") # 출력: 3.14 올림: 4
print(f"3.14 내림: {math.floor(3.14)}") # 출력: 3.14 내림: 3
print(f"-5의 절댓값: {math.fabs(-5)}") # 출력: -5의 절댓값: 5.0
print(f"10의 자연로그: {math.log(10)}") # 출력: 10의 자연로그: 2.302585092994046
print(f"100의 10진 로그: {math.log(100, 10)}") # 출력: 100의 10진 로그: 2.0
3. random 모듈: 무작위성의 마법사
random 모듈은 난수(Random Number)를 생성하는 다양한 함수를 제공합니다. 게임, 시뮬레이션, 암호화 등 무작위성이 필요한 곳에 사용됩니다.
3.1. 주요 함수
random.random(): 0.0 이상 1.0 미만의 부동 소수점 난수를 반환합니다.random.randint(a, b): a 이상 b 이하의 정수 난수를 반환합니다.random.randrange(start, stop, step):range()와 유사하게 특정 범위의 정수 난수를 반환합니다.random.choice(seq): 시퀀스(리스트, 튜플, 문자열 등)에서 임의의 요소를 하나 선택하여 반환합니다.random.sample(population, k): 모집단(population)에서 중복 없이k개의 요소를 선택하여 리스트로 반환합니다.random.shuffle(x): 리스트x의 요소들을 무작위로 섞습니다. (원본 리스트를 변경)
import random
print(f"0.0 이상 1.0 미만 난수: {random.random()}") # 출력: 0.0 이상 1.0 미만 난수: 0.12345...
print(f"1부터 10 사이 정수 난수: {random.randint(1, 10)}") # 출력: 1부터 10 사이 정수 난수: 7
# 주사위 굴리기
dice = random.randint(1, 6)
print(f"주사위: {dice}")
fruits = ["apple", "banana", "cherry", "date"]
print(f"랜덤 과일: {random.choice(fruits)}") # 출력: 랜덤 과일: banana
# 로또 번호 생성 (1부터 45 중 6개)
lotto_numbers = random.sample(range(1, 46), 6)
print(f"로또 번호: {sorted(lotto_numbers)}") # 출력: 로또 번호: [5, 12, 23, 31, 38, 44]
# 리스트 섞기
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(f"섞인 리스트: {my_list}") # 출력: 섞인 리스트: [3, 1, 5, 2, 4]
4. time 모듈: 시간 관련 작업
time 모듈은 시간과 관련된 다양한 함수를 제공합니다. 주로 시간 지연, 현재 시간 측정 등에 사용됩니다.
4.1. 주요 함수
time.sleep(seconds): 지정된 초(seconds)만큼 프로그램 실행을 일시 중지합니다.time.time(): 1970년 1월 1일 0시 0분 0초(UTC)부터 현재까지 경과된 시간을 초 단위로 반환합니다. (Unix Time)
import time
print("3초 후에 메시지가 출력됩니다.")
time.sleep(3) # 3초 대기
print("메시지 출력!")
start_time = time.time()
print("작업 시작...")
# 어떤 작업 수행
sum_val = 0
for i in range(1, 10000000):
sum_val += i
end_time = time.time()
print(f"작업 완료! 경과 시간: {end_time - start_time:.4f}초")
5. datetime 모듈: 날짜와 시간의 정밀한 조작
datetime 모듈은 날짜와 시간을 정밀하게 다룰 수 있는 클래스들을 제공합니다. date, time, datetime, timedelta 클래스가 주요 구성 요소입니다.
5.1. datetime 클래스
날짜와 시간을 모두 포함하는 객체를 생성합니다.
datetime.datetime.now(): 현재 날짜와 시간을 반환합니다.datetime.datetime(year, month, day, hour, minute, second, microsecond): 특정 날짜와 시간으로 객체를 생성합니다.strftime(format):datetime객체를 원하는 형식의 문자열로 변환합니다.strptime(string, format): 문자열을datetime객체로 변환합니다.
import datetime
# 현재 날짜와 시간
now = datetime.datetime.now()
print(f"현재: {now}") # 출력: 현재: 2023-10-26 10:30:45.123456
# 특정 날짜와 시간 생성
my_birthday = datetime.datetime(1990, 5, 15, 10, 30, 0)
print(f"내 생일: {my_birthday}") # 출력: 내 생일: 1990-05-15 10:30:00
# 날짜/시간 요소 접근
print(f"년: {now.year}, 월: {now.month}, 일: {now.day}")
print(f"시: {now.hour}, 분: {now.minute}, 초: {now.second}")
# 날짜/시간 형식 지정 (strftime)
formatted_date = now.strftime("%Y년 %m월 %d일 %H시 %M분 %S초")
print(f"형식 지정: {formatted_date}") # 출력: 형식 지정: 2023년 10월 26일 10시 30분 45초
# 문자열을 datetime 객체로 변환 (strptime)
date_str = "2024-01-01 12:00:00"
parsed_date = datetime.datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"문자열 변환: {parsed_date}") # 출력: 문자열 변환: 2024-01-01 12:00:00
5.2. timedelta 클래스
두 datetime 객체 간의 시간 차이를 나타내거나, datetime 객체에 시간을 더하거나 뺄 때 사용합니다.
import datetime
# 두 날짜/시간 간의 차이 계산
date1 = datetime.datetime(2023, 1, 1)
date2 = datetime.datetime(2023, 1, 10)
time_difference = date2 - date1
print(f"두 날짜 간의 차이: {time_difference}") # 출력: 두 날짜 간의 차이: 9 days, 0:00:00
print(f"차이 (일): {time_difference.days}") # 출력: 차이 (일): 9
# 날짜에 시간 더하기/빼기
future_date = now + datetime.timedelta(days=7, hours=3)
print(f"일주일 3시간 후: {future_date}")
past_date = now - datetime.timedelta(weeks=2)
print(f"2주 전: {past_date}")
6. 결론: 파이썬의 풍부한 기본 기능 활용
이 챕터를 통해 여러분은 파이썬에서 자주 사용되는 핵심 내장 모듈인 math, random, time, datetime의 주요 기능과 활용법에 대해 깊이 있게 학습했습니다. math 모듈을 통해 복잡한 수학 계산을 수행하고, random 모듈을 통해 무작위성을 활용하며, time 모듈로 시간 지연이나 측정 작업을 하고, datetime 모듈로 날짜와 시간을 정밀하게 조작하는 방법을 배웠습니다.
이러한 내장 모듈들은 파이썬을 설치하면 기본적으로 제공되는 ‘기본 도구 상자’와 같습니다. 이 모듈들을 적절히 활용하면 외부 라이브러리를 설치할 필요 없이 다양한 작업을 손쉽게 수행할 수 있으며, 코드의 생산성을 높이고 오류를 줄이는 데 크게 기여합니다. 또한, 내장 모듈들은 파이썬 내부적으로 최적화되어 있어 성능 면에서도 이점을 가집니다.
이제 여러분은 파이썬의 기본적인 문법과 자료 구조, 제어문, 함수 정의 및 호출, 그리고 다양한 내장 함수와 내장 모듈들을 다룰 수 있게 되었습니다. 다음 챕터에서는 파이썬의 모듈들을 체계적으로 관리하는 ‘패키지(Package)’의 개념과 구조에 대해 알아보겠습니다. 패키지는 관련된 모듈들을 디렉토리 형태로 묶어 관리하는 방법으로, 대규모 프로젝트에서 코드의 구조를 더욱 효율적으로 만들 수 있습니다. 오늘 배운 내장 모듈들을 활용하여 다양한 데이터를 처리하고 문제를 해결해 보면서, 여러분의 파이썬 실력을 더욱 단단하게 다지세요!
