38  칼로리 카운터 (Calorie Counter)

매일 섭취하는 칼로리를 추적하는 앱을 만들어 봅시다. 단순히 칼로리 수치뿐만 아니라, 탄수화물, 단백질, 지방 등 영양소(매크로 및 마이크로 영양소) 정보를 포함하여 건강 상태를 종합적으로 파악할 수 있는 도구를 구축해 보세요.

식단 관리뿐만 아니라 목표 체중 설정, 기초 대사량 계산 등 개인 맞춤형 정보를 제공함으로써 사용자에게 실질적인 도움을 줄 수 있습니다. 데이터를 시각화하여 변화 과정을 한눈에 보여주는 기능도 추가해 보세요.

38.1 주요 개발 포인트

  • 사용자 프로필: 나이, 체중, 신장, 활동 수준 등을 기반으로 일일 권장 칼로리를 계산합니다.
  • 식품 데이터베이스: 식품의 영양 정보를 관리하거나 외부 API(예: Edamam, FatSecret 등)를 연동합니다.
  • 영양소 추적 (Macro Tracking): 탄수화물, 단백질, 지방의 비율을 실시간으로 계산하고 목표치와 비교합니다.
  • 일일 기록 로그: 날짜별로 섭취한 음식을 저장하고 조회할 수 있는 로그 기능을 구현합니다.
  • 시각화 (Chart): 일주일 또는 한 달간의 칼로리 섭취 변화를 그래프로 시각화합니다.

38.2 Python 구현 예시 (간단한 영양소 합계 계산기)

class CalorieTracker:
    """
    식단과 영양소를 추적하는 클래스입니다.
    """
    def __init__(self):
        self.daily_log = []
        self.goals = {'calories': 2000, 'protein': 150, 'carbs': 250, 'fats': 70}

    def add_food(self, name, cal, protein, carbs, fats):
        food_item = {
            'name': name,
            'cal': cal,
            'protein': protein,
            'carbs': carbs,
            'fats': fats
        }
        self.daily_log.append(food_item)
        print(f"'{name}'이(가) 추가되었습니다. ({cal} kcal)")

    def calculate_totals(self):
        totals = {'cal': 0, 'protein': 0, 'carbs': 0, 'fats': 0}
        for item in self.daily_log:
            totals['cal'] += item['cal']
            totals['protein'] += item['protein']
            totals['carbs'] += item['carbs']
            totals['fats'] += item['fats']
        return totals

    def display_report(self):
        totals = self.calculate_totals()
        print("\n--- 오늘의 영양 섭취 리포트 ---")
        print(f"총 칼로리: {totals['cal']} / {self.goals['calories']} kcal")
        print(f"단백질: {totals['protein']} / {self.goals['protein']} g")
        print(f"탄수화물: {totals['carbs']} / {self.goals['carbs']} g")
        print(f"지방: {totals['fats']} / {self.goals['fats']} g")
        
        if totals['cal'] > self.goals['calories']:
            print("주의! 목표 칼로리를 초과했습니다.")
        else:
            print(f"남은 칼로리: {self.goals['calories'] - totals['cal']} kcal")

if __name__ == "__main__":
    tracker = CalorieTracker()
    
    # 예시 식품 추가
    tracker.add_food("닭가슴살 샐러드", 350, 30, 10, 5)
    tracker.add_food("카페 라떼", 150, 5, 12, 6)
    tracker.add_food("스테이크 정식", 800, 60, 40, 35)
    
    tracker.display_report()