Thanks to visit codestin.com
Credit goes to github.com

Skip to content

jiyoonOk/MealMate

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

48 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

MealMate - ๊ฐœ์ธ ๋งž์ถคํ˜• ์‹๋‹จ ๊ด€๋ฆฌ ๋ฐ ์นผ๋กœ๋ฆฌ ์ถ”์  Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

MealMate๋Š” ๊ฐœ์ธ์˜ ์‹ ์ฒด ์ •๋ณด์™€ ๋ชฉํ‘œ์— ๋งž์ถ˜ ๊ณผํ•™์ ์ธ ์‹๋‹จ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” Android ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. Harris-Benedict ๊ณต์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ •๋ฐ€ํ•œ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ๊ณผ ์ •๋ถ€ ๊ณต๊ณต API๋ฅผ ํ™œ์šฉํ•œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜์–‘ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ํ”„๋กœ์ ํŠธ ๋ฐฐ๊ฒฝ

  • ํ˜„๋Œ€์ธ์˜ ์‹์Šต๊ด€ ๊ด€๋ฆฌ ์–ด๋ ค์›€: ๋ฐ”์œ ์ผ์ƒ ์†์—์„œ ์ฒด๊ณ„์ ์ธ ์‹๋‹จ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ ์ฆ๋Œ€
  • ๊ฐœ์ธ ๋งž์ถคํ˜• ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ: ์„ฑ๋ณ„, ๋‚˜์ด, ํ™œ๋™๋Ÿ‰, ๋ชฉํ‘œ๋ฅผ ๊ณ ๋ คํ•œ ๊ณผํ•™์  ์ ‘๊ทผ
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜์–‘ ์ •๋ณด: ์ •๋ถ€ ๊ณต๊ณต ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ์ •ํ™•ํ•œ ์‹ํ’ˆ ์˜์–‘ ์ •๋ณด
  • ์ผ์ฃผ์ผ ๋‹จ์œ„ ์ง„ํ–‰๋ฅ  ์ถ”์ : ์ง€์†์ ์ธ ๋™๊ธฐ๋ถ€์—ฌ๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ

โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ ํŠน์ง•

  • ๐Ÿงฎ ๊ณผํ•™์  ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ: Harris-Benedict ๊ณต์‹ ๊ธฐ๋ฐ˜ ๊ธฐ์ดˆ๋Œ€์‚ฌ์œจ(BMR) ์‚ฐ์ถœ
  • ๐Ÿ“ฑ ์ง๊ด€์ ์ธ UI/UX: Material Design ๊ธฐ๋ฐ˜์˜ ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธํ„ฐํŽ˜์ด์Šค
  • ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”: MPAndroidChart๋ฅผ ํ™œ์šฉํ•œ ์ผ์ฃผ์ผ ์นผ๋กœ๋ฆฌ ๋‹ฌ์„ฑ๋ฅ  ์ฐจํŠธ
  • ๐Ÿ—„๏ธ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Room์„ ํ™œ์šฉํ•œ ์˜คํ”„๋ผ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
  • ๐ŸŒ ๊ณต๊ณต API ์—ฐ๋™: ์ •๋ถ€ ์‹ํ’ˆ์˜์•ฝํ’ˆ์•ˆ์ „์ฒ˜ ์˜์–‘์„ฑ๋ถ„ API ํ™œ์šฉ
  • ๐Ÿ—๏ธ ํ˜„๋Œ€์  ์•„ํ‚คํ…์ฒ˜: MVVM ํŒจํ„ด, Hilt ์˜์กด์„ฑ ์ฃผ์ž…, DataBinding ์ ์šฉ

๐Ÿ”ฌ ๊ธฐ์ˆ ์  ํŠน์ง• ๋ฐ ์•„ํ‚คํ…์ฒ˜

๐Ÿ›๏ธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

๐Ÿ“ฑ View Layer (Activity/Fragment)
    โ†•๏ธ DataBinding
๐ŸŽฎ ViewModel Layer (LiveData + Repository)
    โ†•๏ธ Dependency Injection (Hilt)
๐Ÿ—„๏ธ Model Layer (Room Database + API)

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

  • ์–ธ์–ด: Java 11
  • UI Framework: Android SDK (API 24-33)
  • ์•„ํ‚คํ…์ฒ˜: MVVM Pattern + Repository Pattern
  • ์˜์กด์„ฑ ์ฃผ์ž…: Dagger Hilt 2.44
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Room 2.5.1 (SQLite ๊ธฐ๋ฐ˜)
  • ๋„คํŠธ์›Œํ‚น: Retrofit 2.9.0 + Gson Converter
  • ์ฐจํŠธ: MPAndroidChart v3.1.0
  • UI ์ปดํฌ๋„ŒํŠธ: Material CalendarView 1.4.3
  • ๋นŒ๋“œ ๋„๊ตฌ: Gradle, Android Studio

๐Ÿ“ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

๐Ÿงฎ Harris-Benedict ๊ธฐ์ดˆ๋Œ€์‚ฌ์œจ ๊ณ„์‚ฐ

// ๋‚จ์„ฑ: BMR = (10 ร— ์ฒด์ค‘) + (6.25 ร— ํ‚ค) - (5 ร— ๋‚˜์ด) + 5
// ์—ฌ์„ฑ: BMR = (10 ร— ์ฒด์ค‘) + (6.25 ร— ํ‚ค) - (5 ร— ๋‚˜์ด) - 161

์ตœ์ข… ์นผ๋กœ๋ฆฌ = BMR ร— ํ™œ๋™์ง€์ˆ˜ ร— ๋ชฉ์ ์ง€์ˆ˜

๐Ÿ“Š ํ™œ๋™ ์ง€์ˆ˜ ๋ฐ ๋ชฉ์  ์ง€์ˆ˜

  • ํ™œ๋™ ์ง€์ˆ˜: ์ขŒ์‹(1.2) ~ ๋งค์šฐ ํ™œ๋™์ (1.9)
  • ๋ชฉ์  ์ง€์ˆ˜: ๋‹ค์ด์–ดํŠธ(0.8), ์ฒด์ค‘์œ ์ง€(1.0), ๋ฒŒํฌ์—…(1.2)

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

# ํ•„์š” ๋„๊ตฌ
- Android Studio Arctic Fox ์ด์ƒ
- JDK 11 ์ด์ƒ
- Android SDK API 24-33
- Gradle 7.0 ์ด์ƒ

2. ํ”„๋กœ์ ํŠธ ํด๋ก  ๋ฐ ์„ค์ •

# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone <repository-url>
cd MealMate

# Android Studio์—์„œ ํ”„๋กœ์ ํŠธ ์—ด๊ธฐ
# File -> Open -> ํ”„๋กœ์ ํŠธ ํด๋” ์„ ํƒ

3. ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

# Gradle ๋™๊ธฐํ™” ํ›„ ๋นŒ๋“œ
./gradlew build

# ๋””๋ฐ”์ด์Šค/์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ์„ค์น˜
./gradlew installDebug

๐Ÿ“ฑ ์ฃผ์š” ํ™”๋ฉด ๋ฐ ๊ธฐ๋Šฅ

๐Ÿ  ํ™ˆ ํ™”๋ฉด (HomeFragment)

๐Ÿ“Š ์‚ฌ์šฉ์ž ๋งž์ถค ์ •๋ณด
โ”œโ”€โ”€ ๐Ÿ‘ค ์‚ฌ์šฉ์ž๋ช… + ๋ชฉ์  (๋‹ค์ด์–ดํŠธ/๋ฒŒํฌ์—…/์ฒด์ค‘์œ ์ง€)
โ”œโ”€โ”€ โš–๏ธ ํ˜„์žฌ ์ฒด์ค‘ / ๋ชฉํ‘œ ์ฒด์ค‘
โ””โ”€โ”€ ๐Ÿ“ˆ ์ผ์ฃผ์ผ ์นผ๋กœ๋ฆฌ ๋‹ฌ์„ฑ๋ฅ  ์ฐจํŠธ

๐Ÿ“ ์˜ค๋Š˜์˜ ์‹๋‹จ
โ”œโ”€โ”€ โ˜€๏ธ ์•„์นจ์‹์‚ฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
โ”œโ”€โ”€ ๐ŸŒ… ์ ์‹ฌ์‹์‚ฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
โ””โ”€โ”€ ๐ŸŒ™ ์ €๋…์‹์‚ฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๐Ÿ“… ๋‹ฌ๋ ฅ ํ™”๋ฉด (CalendarFragment)

  • Material CalendarView: ๋‚ ์งœ๋ณ„ ์‹๋‹จ ๊ธฐ๋ก ์กฐํšŒ
  • ์›”๊ฐ„ ๋ทฐ: ์‹๋‹จ ์™„๋ฃŒ ์—ฌ๋ถ€ ์‹œ๊ฐ์  ํ‘œ์‹œ
  • ๋‚ ์งœ ์„ ํƒ: ํŠน์ • ๋‚ ์งœ ์‹๋‹จ ์ƒ์„ธ ๋ณด๊ธฐ

๐ŸŽ ์Œ์‹ ๊ฒ€์ƒ‰ ํ™”๋ฉด (FoodFragment)

  • ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰: ์ •๋ถ€ API ๊ธฐ๋ฐ˜ ์Œ์‹ ๊ฒ€์ƒ‰
  • ์˜์–‘ ์ •๋ณด: ์นผ๋กœ๋ฆฌ, ํƒ„์ˆ˜ํ™”๋ฌผ, ๋‹จ๋ฐฑ์งˆ, ์ง€๋ฐฉ ์ •๋ณด
  • ์ฆ๊ฒจ์ฐพ๊ธฐ: ์ž์ฃผ ๋จน๋Š” ์Œ์‹ ์ €์žฅ ๊ธฐ๋Šฅ

๐Ÿ‘ค ์‚ฌ์šฉ์ž ์„ค์ • ํ™”๋ฉด (UserFragment)

  • ๊ฐœ์ธ ์ •๋ณด ๊ด€๋ฆฌ: ํ‚ค, ๋ชธ๋ฌด๊ฒŒ, ๋‚˜์ด, ์„ฑ๋ณ„ ์ˆ˜์ •
  • ๋ชฉํ‘œ ์„ค์ •: ๋‹ค์ด์–ดํŠธ/๋ฒŒํฌ์—…/์ฒด์ค‘์œ ์ง€ ์„ ํƒ
  • ํ™œ๋™๋Ÿ‰ ์„ค์ •: 5๋‹จ๊ณ„ ํ™œ๋™ ์ˆ˜์ค€ ์„ ํƒ

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ

๐Ÿ“Š ์ฃผ์š” ์—”ํ‹ฐํ‹ฐ

๐Ÿ‘ค User ํ…Œ์ด๋ธ”

CREATE TABLE user (
    userIndex INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    height REAL,
    weight REAL,
    targetWeight REAL,
    age INTEGER,
    gender INTEGER,        -- 1: ๋‚จ์„ฑ, 2: ์—ฌ์„ฑ
    activityLevel INTEGER, -- 1-5: ์ขŒ์‹~๋งค์šฐํ™œ๋™์ 
    purpose INTEGER,       -- 1: ๋‹ค์ด์–ดํŠธ, 2: ๋ฒŒํฌ์—…, 3: ์ฒด์ค‘์œ ์ง€
    bmr REAL              -- ๊ณ„์‚ฐ๋œ ๊ธฐ์ดˆ๋Œ€์‚ฌ์œจ
);

๐Ÿฝ๏ธ Meal ํ…Œ์ด๋ธ”

CREATE TABLE meal (
    mealIndex INTEGER PRIMARY KEY AUTOINCREMENT,
    mealDate TEXT NOT NULL,
    mealCnt INTEGER,       -- ์‹์‚ฌ ๋ฒˆํ˜ธ (1: ์•„์นจ, 2: ์ ์‹ฌ, 3: ์ €๋…)
    checked INTEGER,       -- 0: ๋ฏธ์™„๋ฃŒ, 1: ์™„๋ฃŒ
    mealPreset TEXT        -- ํ”„๋ฆฌ์…‹ ์ด๋ฆ„
);

๐Ÿฅ— Food ํ…Œ์ด๋ธ”

CREATE TABLE food (
    foodIndex INTEGER PRIMARY KEY AUTOINCREMENT,
    foodName TEXT NOT NULL,
    food1serving REAL,     -- 1ํšŒ ์ œ๊ณต๋Ÿ‰(g)
    foodKcal REAL,         -- ์นผ๋กœ๋ฆฌ(kcal)
    foodCarbohydrates REAL, -- ํƒ„์ˆ˜ํ™”๋ฌผ(g)
    foodProtein REAL,      -- ๋‹จ๋ฐฑ์งˆ(g)
    foodFat REAL,          -- ์ง€๋ฐฉ(g)
    food_company TEXT,     -- ์ œ์กฐ์‚ฌ/๊ตฌ๋ถ„
    foodLike INTEGER       -- 0: ์ผ๋ฐ˜, 1: ์ฆ๊ฒจ์ฐพ๊ธฐ
);

๐ŸŒ API ์—ฐ๋™

๐Ÿ›๏ธ ์‹ํ’ˆ์˜์•ฝํ’ˆ์•ˆ์ „์ฒ˜ ์˜์–‘์„ฑ๋ถ„ API

Base URL: http://apis.data.go.kr/1471000/FoodNtrIrdntInfoService1/
Endpoint: getFoodNtrItdntList1

Parameters:
- serviceKey: ์ธ์ฆํ‚ค
- desc_kor: ์‹ํ’ˆ๋ช… (ํ•œ๊ธ€)
- type: json (์‘๋‹ต ํ˜•์‹)

๐Ÿ“ฆ API ์‘๋‹ต ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

{
  "header": {
    "resultCode": "00",
    "resultMsg": "NORMAL SERVICE."
  },
  "body": {
    "totalCount": 1,
    "items": [{
      "DESC_KOR": "์Œ€๋ฐฅ",
      "SERVING_WT": 210.0,
      "NUTR_CONT1": 310.0,  // ์นผ๋กœ๋ฆฌ
      "NUTR_CONT2": 68.9,   // ํƒ„์ˆ˜ํ™”๋ฌผ
      "NUTR_CONT3": 6.5,    // ๋‹จ๋ฐฑ์งˆ
      "NUTR_CONT4": 0.6     // ์ง€๋ฐฉ
    }]
  }
}

๐ŸŽจ UI/UX ๋””์ž์ธ ์ฒ ํ•™

๐ŸŽฏ ๋””์ž์ธ ์›์น™

  1. ์ง๊ด€์„ฑ: ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„
  2. ์ผ๊ด€์„ฑ: Material Design ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜
  3. ์ ‘๊ทผ์„ฑ: ๋ชจ๋“  ์—ฐ๋ น๋Œ€๊ฐ€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  4. ํ”ผ๋“œ๋ฐฑ: ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋Œ€ํ•œ ์ฆ‰๊ฐ์ ์ธ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ

๐ŸŽจ ์ƒ‰์ƒ ์ฒด๊ณ„

<!-- Primary Colors -->
<color name="orange">#FF8C00</color>
<color name="white">#FFFFFF</color>
<color name="trans">#F5F5F5</color>

<!-- Semantic Colors -->
<color name="black_40">#666666</color>
<color name="success">#4CAF50</color>
<color name="warning">#FF9800</color>

๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ

  • ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ ์ง€์›: ์Šค๋งˆํŠธํฐ, ํƒœ๋ธ”๋ฆฟ ๋Œ€์‘
  • ์ ์‘ํ˜• UI: ์„ธ๋กœ/๊ฐ€๋กœ ํ™”๋ฉด ๋ชจ๋“œ ์ž๋™ ์กฐ์ •
  • ํ„ฐ์น˜ ์นœํ™”์ : ์ตœ์†Œ 48dp ํ„ฐ์น˜ ์˜์—ญ ๋ณด์žฅ

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

๐Ÿš€ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ๋ฒ•

  1. LazyLoading: RecyclerView๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง
  2. ๋ฐ์ดํ„ฐ ์บ์‹ฑ: Room์„ ํ™œ์šฉํ•œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์บ์‹ฑ
  3. ์ด๋ฏธ์ง€ ์ตœ์ ํ™”: Vector Drawable ์‚ฌ์šฉ์œผ๋กœ ๋‹คํ•ด์ƒ๋„ ์ง€์›
  4. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ: ViewModel + LiveData๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€

๐Ÿ“ˆ ์•ฑ ํฌ๊ธฐ ์ตœ์ ํ™”

APK Size: ~8MB (์ตœ์ ํ™” ํ›„)
- ProGuard ์ ์šฉ์œผ๋กœ ์ฝ”๋“œ ๋‚œ๋…ํ™” ๋ฐ ํฌ๊ธฐ ์ถ•์†Œ
- ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
- Vector Drawable ํ™œ์šฉ

๐Ÿงช ํ…Œ์ŠคํŠธ ์ „๋žต

๐Ÿ” ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ

src/test/               # ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
โ”œโ”€โ”€ ExampleUnitTest.java
โ””โ”€โ”€ model/
    โ””โ”€โ”€ BenedictCalculatorTest.java

src/androidTest/        # ๊ณ„์ธก ํ…Œ์ŠคํŠธ
โ”œโ”€โ”€ ExampleInstrumentedTest.java
โ””โ”€โ”€ database/
    โ””โ”€โ”€ DatabaseTest.java

โœ… ์ฃผ์š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

  • ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ ์ •ํ™•์„ฑ: Benedict ๊ณต์‹ ๊ณ„์‚ฐ ๊ฒ€์ฆ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค CRUD: Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ ํ…Œ์ŠคํŠธ
  • API ํ†ต์‹ : Retrofit ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ
  • UI ์ƒํ˜ธ์ž‘์šฉ: Espresso๋ฅผ ํ™œ์šฉํ•œ UI ํ…Œ์ŠคํŠธ

๐Ÿ›ก๏ธ ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ

๐Ÿ”’ ๋ณด์•ˆ ์กฐ์น˜

  • ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์ €์žฅ: ๊ฐœ์ธ์ •๋ณด๋Š” ๋””๋ฐ”์ด์Šค ๋‚ด๋ถ€์—๋งŒ ์ €์žฅ
  • API ํ‚ค ๋ณด์•ˆ: Constants ํด๋ž˜์Šค๋ฅผ ํ†ตํ•œ ๋ฏผ๊ฐ ์ •๋ณด ๊ด€๋ฆฌ
  • ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”: Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค SQLCipher ์ ์šฉ ๊ฐ€๋Šฅ
  • ๊ถŒํ•œ ์ตœ์†Œํ™”: ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ์š”์ฒญ (INTERNET, ACCESS_NETWORK_STATE)

๐Ÿ›ก๏ธ ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์นจ

์ˆ˜์ง‘ ์ •๋ณด: ์ด๋ฆ„, ํ‚ค, ๋ชธ๋ฌด๊ฒŒ, ๋‚˜์ด, ์„ฑ๋ณ„
์ €์žฅ ์œ„์น˜: ์‚ฌ์šฉ์ž ๋””๋ฐ”์ด์Šค ๋กœ์ปฌ ์ €์žฅ์†Œ
์™ธ๋ถ€ ์ „์†ก: ์—†์Œ (๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌ)
๋ฐ์ดํ„ฐ ์‚ญ์ œ: ์•ฑ ์ œ๊ฑฐ ์‹œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ž๋™ ์‚ญ์ œ

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

MealMate/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ src/main/
โ”‚   โ”‚   โ”œโ”€โ”€ java/com/anonymous/mealmate/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api/                    # ๐ŸŒ ๋„คํŠธ์›Œํฌ API ๋ ˆ์ด์–ด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChartApiHelper.java
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ FoodApiHelper.java
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ constants/              # ๐Ÿ“‹ ์ƒ์ˆ˜ ์ •์˜
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Constants.java
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ UserHashMap.java
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ feature/                # ๐Ÿ”ง ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ BenedictCalculator.java
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Date.java
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ MealMateApplication.java
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ model/                  # ๐Ÿ“Š ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ ˆ์ด์–ด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ dao/               # ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ฐ์ฒด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ database/          # ๐Ÿ—๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ dto/               # ๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ entity/            # ๐Ÿ›๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ repository/        # ๐Ÿ“š ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ํŒจํ„ด
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service/               # โš™๏ธ ์„œ๋น„์Šค ๋ ˆ์ด์–ด
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ view/                  # ๐ŸŽจ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ activity/         # ๐Ÿ“ฑ ์•กํ‹ฐ๋น„ํ‹ฐ
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ adapter/          # ๐Ÿ”„ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ dialog/           # ๐Ÿ’ฌ ๋‹ค์ด์–ผ๋กœ๊ทธ
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ fragment/         # ๐Ÿงฉ ํ”„๋ž˜๊ทธ๋จผํŠธ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ viewmodel/            # ๐ŸŽฎ ๋ทฐ๋ชจ๋ธ (MVVM)
โ”‚   โ”‚   โ””โ”€โ”€ res/                      # ๐Ÿ“ฑ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ
โ”‚   โ”‚       โ”œโ”€โ”€ drawable/             # ๐ŸŽจ ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค
โ”‚   โ”‚       โ”œโ”€โ”€ font/                 # ๐Ÿ”ค ํฐํŠธ ๋ฆฌ์†Œ์Šค
โ”‚   โ”‚       โ”œโ”€โ”€ layout/               # ๐Ÿ“ ๋ ˆ์ด์•„์›ƒ XML
โ”‚   โ”‚       โ”œโ”€โ”€ menu/                 # ๐Ÿ“‹ ๋ฉ”๋‰ด ๋ฆฌ์†Œ์Šค
โ”‚   โ”‚       โ”œโ”€โ”€ values/               # ๐Ÿ’พ ๊ฐ’ ๋ฆฌ์†Œ์Šค
โ”‚   โ”‚       โ””โ”€โ”€ mipmap-*/             # ๐Ÿ–ผ๏ธ ์•ฑ ์•„์ด์ฝ˜
โ”‚   โ””โ”€โ”€ build.gradle                  # ๐Ÿ”ง ๋ชจ๋“ˆ ๋นŒ๋“œ ์„ค์ •
โ”œโ”€โ”€ gradle/                           # ๐Ÿ› ๏ธ Gradle ๋ž˜ํผ
โ”œโ”€โ”€ build.gradle                      # ๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์„ค์ •
โ”œโ”€โ”€ settings.gradle                   # โš™๏ธ ํ”„๋กœ์ ํŠธ ์„ค์ •
โ””โ”€โ”€ README.md                         # ๐Ÿ“– ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ

๐Ÿ“ˆ ํ–ฅํ›„ ๊ฐœ๋ฐœ ๊ณ„ํš

๐Ÿ”„ ๊ธฐ๋Šฅ ํ™•์žฅ

  • ์†Œ์…œ ๊ธฐ๋Šฅ: ์นœ๊ตฌ์™€ ์‹๋‹จ ๊ณต์œ  ๋ฐ ๊ฒฝ์Ÿ
  • AI ์ถ”์ฒœ: ๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜ ๊ฐœ์ธ ๋งž์ถค ์‹๋‹จ ์ถ”์ฒœ
  • ์šด๋™ ์—ฐ๋™: ์†Œ๋ชจ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ํ†ตํ•ฉ ๊ด€๋ฆฌ
  • ์˜์–‘์‚ฌ ์ƒ๋‹ด: ์ „๋ฌธ๊ฐ€ ์ƒ๋‹ด ์„œ๋น„์Šค ์—ฐ๋™

๐ŸŒ ํ”Œ๋žซํผ ํ™•์žฅ

  • iOS ๋ฒ„์ „: Swift ๊ธฐ๋ฐ˜ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: React ๊ธฐ๋ฐ˜ ์›น ๋ฒ„์ „ ์ œ๊ณต
  • ๋ฐฑ์—”๋“œ API: Spring Boot ๊ธฐ๋ฐ˜ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค

๐Ÿš€ ๊ธฐ์ˆ ์  ๊ฐœ์„ 

  • Jetpack Compose: ์ตœ์‹  UI ํ”„๋ ˆ์ž„์›Œํฌ ๋„์ž…
  • Kotlin ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ์ฝ”ํ‹€๋ฆฐ ์–ธ์–ด๋กœ ์ ์ง„์  ์ „ํ™˜
  • GraphQL: ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ์‹œ์Šคํ…œ
  • ์˜คํ”„๋ผ์ธ ์šฐ์„ : Progressive Web App ๊ธฐ๋Šฅ

๐Ÿ”ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๋„๊ตฌ

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ๋„๊ตฌ

IDE: Android Studio 2023.1.1+
์–ธ์–ด: Java 11
๋นŒ๋“œ ๋„๊ตฌ: Gradle 8.0+
๋ฒ„์ „ ๊ด€๋ฆฌ: Git
์˜์กด์„ฑ ๊ด€๋ฆฌ: Gradle Dependency Management

๐Ÿ“ฆ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „

// ํ•ต์‹ฌ Android
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'

// ์•„ํ‚คํ…์ฒ˜ ์ปดํฌ๋„ŒํŠธ
implementation 'androidx.room:room-runtime:2.5.1'
implementation 'com.google.dagger:hilt-android:2.44'

// ๋„คํŠธ์›Œํ‚น
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

// UI ์ปดํฌ๋„ŒํŠธ
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'com.prolificinteractive:material-calendarview:1.4.3'

๐Ÿš€ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ

๐Ÿ”จ ๋นŒ๋“œ ๋ช…๋ น์–ด

# ๋””๋ฒ„๊ทธ ๋นŒ๋“œ
./gradlew assembleDebug

# ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ
./gradlew assembleRelease

# ํ…Œ์ŠคํŠธ ์‹คํ–‰
./gradlew test
./gradlew connectedAndroidTest

# ์ •์  ๋ถ„์„
./gradlew lint

๐Ÿ“ฆ APK ์ƒ์„ฑ

# ์„œ๋ช…๋œ APK ์ƒ์„ฑ
./gradlew assembleRelease

# APK ์œ„์น˜
app/build/outputs/apk/release/app-release.apk

๐Ÿค ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ผ์ธ

๐ŸŒŸ ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

  1. ์ด์Šˆ ๋“ฑ๋ก: ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ๋˜๋Š” ๊ธฐ๋Šฅ ์ œ์•ˆ
  2. ํฌํฌ: ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์ธ ๊ณ„์ •์œผ๋กœ ํฌํฌ
  3. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ: feature/๊ธฐ๋Šฅ๋ช… ๋˜๋Š” bugfix/๋ฒ„๊ทธ๋ช…
  4. ์ปค๋ฐ‹: ๋ช…ํ™•ํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ
  5. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ: ์ƒ์„ธํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ PR ์ƒ์„ฑ

๐Ÿ“‹ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

// ํด๋ž˜์Šค๋ช…: PascalCase
public class MealCheckViewModel { }

// ๋ฉ”์„œ๋“œ๋ช…: camelCase
public void calculateBMR() { }

// ์ƒ์ˆ˜: UPPER_SNAKE_CASE
public static final int MEAL_BREAKFAST = 1;

// ๋ณ€์ˆ˜๋ช…: camelCase
private User currentUser;

๐Ÿ“ž ํ”„๋กœ์ ํŠธ ์ •๋ณด

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿ† ์ฃผ์š” ์„ฑ๊ณผ

  • โœ… ์™„์ „ํ•œ MVVM ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„
  • โœ… ๊ณผํ•™์  ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • โœ… ์ •๋ถ€ ๊ณต๊ณต API ์—ฐ๋™ ์„ฑ๊ณต
  • โœ… ์ง๊ด€์ ์ธ UI/UX ๋””์ž์ธ ์™„์„ฑ
  • โœ… ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ตœ์ ํ™”

๐ŸŽฏ Project Goals: ๊ฐœ์ธ ๋งž์ถคํ˜• ์‹๋‹จ ๊ด€๋ฆฌ โ†’ ๊ฑด๊ฐ•ํ•œ ๋ผ์ดํ”„์Šคํƒ€์ผ ์ง€์›
๐Ÿ”‘ Key Technologies: Android Native, MVVM, Room Database, Retrofit API
๐Ÿ“ˆ Impact: ๊ณผํ•™์  ์ ‘๊ทผ์„ ํ†ตํ•œ ์ฒด๊ณ„์ ์ธ ์‹๋‹จ ๊ด€๋ฆฌ ์†”๋ฃจ์…˜

Made with โค๏ธ for Healthy Lifestyle Management

About

management to users meal or check food somthing

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published