30 스톱워치 앱 (Stopwatch App)
시간을 측정하고 랩 타임(Lap Time)을 기록할 수 있는 스톱워치 앱을 만들어 봅시다. 소수점 이하의 정밀한 시간을 실시간으로 보여주고, 필요할 때마다 중간 기록을 남기는 것이 목표입니다.
이 프로젝트는 시간 측정 기술과 실시간 UI 업데이트, 그리고 간단한 데이터 리스트를 다루는 방법을 익히기에 아주 좋은 과제입니다. 특히 운동이나 실험 시 유용한 스톱워치를 직접 설계해 보세요.
30.1 주요 개발 포인트
- 정밀한 시간 측정 (High Precision Timer):
time.time()이나time.perf_counter()를 사용하여 정확한 시간을 측정합니다. - 시작, 일시정지, 재개, 초기화 기능: 타이머의 상태를 제어하고 중단된 시점부터 다시 시작할 수 있도록 합니다.
- 랩 타임 기록 및 리스트 관리: ‘Lap’ 버튼을 누를 때마다 현재 시간을 기록하고 목록으로 보여줍니다.
- 실시간 UI 업데이트 (Live Update): 0.1초 또는 0.01초 단위로 경과 시간을 화면에 매끄럽게 업데이트합니다.
- 사용자 인터페이스 (GUI): 큰 숫자로 현재 시간을 보여주고, 랩 기록을 아래쪽에 표 형태로 배치한 UI를 구축합니다.
30.2 Python 구현 예시 (Tkinter 활용 간단한 스톱워치 시뮬레이션)
import time
class SimpleStopwatch:
"""
시간을 측정하고 랩 타임을 기록하는 기능을 관리합니다.
"""
def __init__(self):
self.start_time = 0
self.elapsed_time = 0
self.is_running = False
self.laps = []
def start(self):
"""
스톱워치를 시작하거나 재개합니다.
"""
if not self.is_running:
self.start_time = time.time() - self.elapsed_time
self.is_running = True
print("스톱워치 시작!")
def pause(self):
"""
스톱워치를 일시정지합니다.
"""
if self.is_running:
self.elapsed_time = time.time() - self.start_time
self.is_running = False
print(f"일시정지됨. 경과 시간: {self.elapsed_time:.2f}초")
def reset(self):
"""
스톱워치를 초기화합니다.
"""
self.start_time = 0
self.elapsed_time = 0
self.is_running = False
self.laps = []
print("초기화 완료.")
def record_lap(self):
"""
현재 랩 타임을 기록합니다.
"""
if self.is_running:
current_lap = time.time() - self.start_time
self.laps.append(current_lap)
print(f"랩 {len(self.laps)}: {current_lap:.2f}초")
if __name__ == "__main__":
stopwatch = SimpleStopwatch()
# 3초간 실행 후 랩 기록 시나리오 테스트
stopwatch.start()
time.sleep(1.2)
stopwatch.record_lap()
time.sleep(1.5)
stopwatch.pause()
# 최종 결과 요약
print(f"\n총 경과 시간: {stopwatch.elapsed_time:.2f}초")
print(f"랩 기록 목록: {['{:.2f}s'.format(l) for l in stopwatch.laps]}")