21 할 일 목록 (ToDo List)
다양한 작업 단계(할 일, 진행 중, 완료)를 추적할 수 있는 할 일 앱을 만들어 봅시다. 보너스 점수를 위해 반복되는 작업(Recurring tasks)과 작업 일정 관리(데드라인 등) 기능을 포함시켜 보세요.
이 프로젝트는 상태 관리(Status Management)와 데이터 정렬, 그리고 사용자 경험(UX)을 고려한 효율적인 할 일 관리 시스템을 익히기에 아주 좋은 과제입니다. 특히 최근 업무 생산성을 높여주는 칸반 보드(Kanban Board)나 할 일 알림 기능을 직접 설계해 보세요.
21.1 주요 개발 포인트
- 작업 단계 및 상태 추적: ‘할 일(To Do)’, ‘진행 중(In Progress)’, ’완료(Done)’로 상태를 구분하여 관리합니다.
- 반복 작업 관리 (Recurring Tasks): 매일, 매주 또는 매달 반복되는 작업을 자동으로 생성하는 로직을 구현합니다.
- 작업 일정 및 데드라인 설정: 각 할 일에 마감 기한을 정하고, 기한이 임박했을 때 알림을 보내는 기능을 추가합니다.
- 카테고리 및 우선순위 설정: 업무, 개인, 건강 등 카테고리를 나누고 중요도에 따라 우선순위를 부여합니다.
- 사용자 인터페이스 (GUI): 드래그 앤 드롭으로 상태를 변경하거나, 캘린더 뷰를 통해 일정을 보여주는 UI를 구축합니다.
21.2 Python 구현 예시 (간단한 할 일 관리 클래스)
from datetime import datetime
class TodoList:
"""
할 일 목록을 생성하고 각 작업의 상태와 데드라인을 관리합니다.
"""
def __init__(self):
self.tasks = []
self.categories = ["업무", "개인", "공부"]
def add_task(self, title, category, due_date=None):
"""
새로운 할 일을 목록에 추가합니다.
"""
task = {
"id": len(self.tasks) + 1,
"title": title,
"category": category,
"status": "할 일",
"due_date": due_date,
"created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.tasks.append(task)
print(f"작업 '{title}'이(가) 추가되었습니다. (카테고리: {category})")
def update_status(self, task_id, new_status):
"""
작업의 현재 상태를 업데이트합니다.
"""
for task in self.tasks:
if task['id'] == task_id:
task['status'] = new_status
print(f"작업 {task_id}번의 상태가 '{new_status}'(으)로 변경되었습니다.")
return True
print("해당 작업을 찾을 수 없습니다.")
return False
def list_tasks(self):
"""
현재 진행 중인 모든 할 일을 보여줍니다.
"""
print("\n--- 나의 할 일 목록 ---")
for task in self.tasks:
print(f"[{task['status']}] {task['id']}. {task['title']} ({task['category']})")
if __name__ == "__main__":
my_todo = TodoList()
# 할 일 추가 테스트
my_todo.add_task("파이썬 코딩 공부하기", "공부", "2026-03-01")
my_todo.add_task("친구와 저녁 식사", "개인")
my_todo.add_task("코드 리뷰 완료하기", "업무", "2026-02-28")
# 상태 업데이트 테스트
my_todo.update_status(1, "진행 중")
my_todo.list_tasks()