Skip to content

๐Ÿ‘‰ ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์ƒ‰๋‹ค๋ฅธ ๊ธฐ๊บผ์ด ๋น„์ฃผ๋ฅ˜๋กœ ๊ฐ„๋‹ค. ๐Ÿ‘ˆ

Notifications You must be signed in to change notification settings

DeveloperAcademy-POSTECH/2025-C4-M10-ProudlyOffbeat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

177 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงธ ๊ธฐ๊บผ์ด ๋น„์ฃผ๋ฅ˜ (ProudlyOffbeat) โ€“ ์œ ์ผ๋ฌด์ด HomeKit ๊ธฐ๋ฐ˜ ๋ชฐ์ž…ํ˜• ๋™ํ™” ์•ฑ

แ„€แ…ตแ„แ…ฅแ„‹แ…ต แ„‡แ…ตแ„Œแ…ฎแ„…แ…ฒ แ„‰แ…กแ„Œแ…ตแ†ซ

Xcode iOS Swift Version

"๊ฐ๊ฐ์„ ๊นจ์šฐ๋Š” ๋™ํ™”, ๊ธฐ์ˆ ๋กœ ์ด๋ค„๋‚ธ ์„ธ๊ณ„"
๋‹น์—ฐํ•œ ์„ ํƒ์„ ์˜์‹ฌํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋จธ๋ฌด๋ฅด๊ณ  ์‹ถ์€ ๋ชฐ์ž…์˜ ๊ณต๊ฐ„์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜๏ธ ๊ธฐ๊บผ์ด ๋น„์ฃผ๋ฅ˜ Team Member


Demian
@YooGyeongMo

Echo
@shinmingyu

Martin
@Jihan-Chae

Ito
@changjaemun

๐ŸŽ™๏ธ Member Quotes

๐Ÿ’ช Ito

โ€œ์‚ฐ์„ ์˜ค๋ฅด๊ธด ํž˜๋“ค์ฃ , ๊ทธ๋Ÿฌ๋‚˜ ์ •์ƒ์˜ ์ „๋ง์€ ๊ทธ๋Ÿด ๊ฐ€์น˜๊ฐ€ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.โ€

๐Ÿฃ Demian

โ€œ์„ค๊ต๋Š” ํ•„์š” ์—†์–ด. ๋ถ€๋Ÿฌ์ง„ ๋ผˆ๊ฐ€ ๋” ํฐ ๊ตํ›ˆ์„ ์ƒˆ๊ฒจ์ค„ ํ…Œ๋‹ˆ๊นŒ.โ€

๐Ÿ‘น Martin

โ€œ์ธ์ƒ์˜ ์“ด๋ง›์„ ๋ดค์–ด? ๊พน ์ฐธ๊ณ  ์”น๋‹ค ๋ณด๋ฉด, ์–ด๋А์ƒˆ ๋‹ฌ์ฝคํ•ด์งˆ ๊ฑฐ์•ผ.โ€

๐Ÿ—ฃ๏ธ Echo

โ€œํ–‰์šด์€ ์ž˜ ์•ˆ ๋”ฐ๋ž์–ด. ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋‹ˆ๊นŒ.โ€

๐Ÿงฉ About the Project

โ€œ๋ง๋ณด๋‹ค ๊ณต๊ฐ„์ด ๋จผ์ € ๋ง์„ ๊ฑฐ๋Š” ๊ฒฝํ—˜โ€ ์šฐ๋ฆฌ๋Š” ์•„์ด๋“ค์—๊ฒŒ ์ฝํžˆ๋Š” ๋™ํ™”์ฑ…์ด ์•„๋‹Œ, ๋ชธ์œผ๋กœ ๋А๋ผ๋Š” ๋™ํ™” ์„ธ๊ณ„๋ฅผ ์ฃผ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒ€ ๊ธฐ๊บผ์ด ๋น„์ฃผ๋ฅ˜๋Š” iPad๋กœ ๋™ํ™”๋ฅผ ํŽผ์น˜๊ณ ,iPhone(๋งค์ง ์™„๋“œ)๋ฅผ ์ด์šฉํ•œ ์ธํ„ฐ๋ ‰์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ iPad๊ฐ€ ์ฃผ๋ณ€ ๊ธฐ๊ธฐ(HomeKit)๋ฅผ ์ œ์–ดํ•ด ๋น›, ์†Œ๋ฆฌ, ๊ณต๊ฐ„์ด ํ•˜๋‚˜๊ฐ€ ๋˜๋Š” ๋ชฐ์ž… ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ๊ฐ ๊ธฐ๋ฐ˜ ๋™ํ™” ์•ฑ์ž…๋‹ˆ๋‹ค.

์•„์ด๋“ค์€ iPad ์†์—์„œ ์ฑ…์žฅ์„ ๋„˜๊ธฐ๋ฉฐ, ์‹ค์ œ ๋ฐฉ ์•ˆ์˜ ์กฐ๋ช…์ด ๊นœ๋นก์ด๊ณ  ๋ฐ”๋žŒ ์†Œ๋ฆฌ์™€ ์Œ์•…์ด ์–ด์šฐ๋Ÿฌ์ง„ ์ง„์งœ์ฒ˜๋Ÿผ ๋А๊ปด์ง€๋Š” ์ด์•ผ๊ธฐ ์„ธ๊ณ„์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

แ„‡แ…ตแ„Œแ…ฎแ„…แ…ฒ แ„‰แ…กแ„Œแ…ตแ†ซ

๐ŸŽ iPad๋Š” ๋„์„œ๊ด€์ฒ˜๋Ÿผ ์žฅ๋ฉด์„ ๊ณ ๋ฅด๊ณ  SplitView๋กœ ์ฑ…์„ ํŽผ์ณ์ค๋‹ˆ๋‹ค.
๐Ÿ“ฑ iPhone์€ ์žฅ๋ฉด๋ณ„ ์ธํ„ฐ๋ž™์…˜์„ ์ œ์–ดํ•˜๊ณ , ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์ปจํŠธ๋กคํ•ฉ๋‹ˆ๋‹ค.
๐Ÿก ์กฐ๋ช…, ์‚ฌ์šด๋“œ, ์—ฐ์ถœ์€ HomeKit์œผ๋กœ ๊ณต๊ฐ„์— ๋ฐ”๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“˜ ์ž์„ธํ•œ ๊ธฐํš ๋ฐฐ๊ฒฝ์€ Notion ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ‘‰ Notion ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ“˜ ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ


๐Ÿ“Œ Main Features

๐Ÿ“– iPad Library

  • ์—ฌ๋Ÿฌ ์žฅ๋ฉด ๊ธฐ๋ฐ˜์˜ ๋™ํ™”์ฑ…์„ SplitView๋กœ ๊ตฌ์„ฑ (์„ ํƒ โ†’ ํŽผ์น˜๊ธฐ)
  • ๊ฐ ์žฅ๋ฉด์— ๋”ฐ๋ผ HomeKit ์žฅ์น˜ ์ œ์–ด (์กฐ๋ช…, ์‚ฌ์šด๋“œ, ๊ธฐํƒ€ ์•กํ„ฐ)

๐ŸŽฌ iPhone-based Interaction

  • ๊ฐ ์žฅ๋ฉด์— ๋”ฐ๋ผ Multipeer Connectivity(P2P)๋กœ ์—ฐ๊ฒฐ๋œ iPad์—๊ฒŒ ์‹œ๊ทธ๋„.

โœจ ๊ธฐ์ˆ  ์Šคํƒ


๐Ÿ› ๏ธ UIKit vs SwiftUI ๋น„๊ต

ํ•ญ๋ชฉ UIKit (Imperative) SwiftUI (Declarative)
์„ ์–ธ๋ฐฉ์‹ ๋ช…๋ นํ˜• ์„ ์–ธํ˜•
์œ ์ง€๋ณด์ˆ˜ ์ƒํƒœ & ์ด๋ฒคํŠธ ๋ถ„๋ฆฌ ์–ด๋ ค์›€ ์ƒํƒœ ๊ธฐ๋ฐ˜ ๋ฐ”์ธ๋”ฉ โ†’ ๊ตฌ์กฐ ๊ฐ„๊ฒฐ
๋Ÿฌ๋‹ ์ปค๋ธŒ ํŒ€์› ๋Œ€๋ถ€๋ถ„ ๋ฏธ์ˆ™ ๋‚ด๋ถ€ ํ•™์Šต ์™„๋ฃŒ, ์ตœ์‹  ๊ธฐ์ˆ ์— ์ ํ•ฉ
Agile ๋Œ€์‘์„ฑ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ๋น„์šฉ ํผ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘, ๋ฐ˜๋ณต ๊ฐœ๋ฐœ์— ์œ ๋ฆฌ

โœ… SwiftUI ๋„์ž… ์ด์œ :

  • ๋‚ด๋ถ€ ํŒ€ SwiftUI & SwiftData ๊ฒฝํ—˜ โ†’ ๋น ๋ฅธ ์‹คํ—˜ ๋ฐ UI ๊ตฌ์กฐ ๋Œ€์‘
  • ๋ช…ํ™•ํ•œ ์ƒํƒœ ํ๋ฆ„๊ณผ ๋ฐ”์ธ๋”ฉ โ†’ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

๐Ÿง  ์•„ํ‚คํ…์ฒ˜ ๋น„๊ต

ํ•ญ๋ชฉ MVC MVP MVVM (+ Coordinator) TCA
View ์ฑ…์ž„ View + Controller ํ˜ผ์žฌ View โ†’ Presenter ์ „๋‹ฌ View โ†’ ViewModel ๋ฐ”์ธ๋”ฉ View โ†’ Store (Reducer)
๊ฒฐํ•ฉ๋„ Controller-View ๋†’์Œ View-Presenter 1:1 ViewModel ๋ฐ”์ธ๋”ฉ, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ View-Store ๋ถ„๋ฆฌ
ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ โŒ ๋‚ฎ์Œ โญ• Presenter ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ โญ• ViewModel ํ…Œ์ŠคํŠธ ์šฉ์ด โญ• Reducer ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
SwiftUI ์ ํ•ฉ์„ฑ โŒ UIKit์—๋งŒ ์ ํ•ฉ โŒ UIKit ๊ธฐ๋ฐ˜ โญ• SwiftUI ์นœํ™” โญ• SwiftUI ์ตœ์ ํ™” ๊ตฌ์กฐ
ํ•™์Šต ๋‚œ์ด๋„ ๋‚ฎ์Œ ์ค‘๊ฐ„ ์ค‘์ƒ (SwiftUI์—์„œ ์ž์ฃผ ์‚ฌ์šฉ) ์ƒ (DSL ๊ธฐ๋ฐ˜ ๋ณต์žกํ•จ)
Agile ๋Œ€์‘์„ฑ โŒ ์˜ํ–ฅ๋„ ํผ ๋ณดํ†ต โญ• ์œ ์—ฐํ•œ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ, ๋ฐ˜๋ณต ๋Œ€์‘ ๊ฐ€๋Šฅ โญ• ์ผ๊ด€๋œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

โœ… ์šฐ๋ฆฌ๊ฐ€ MVVM + Coordinator + Factory๋ฅผ ์„ ํƒํ•œ ์ด์œ 

MVVM

  • View โ†” ViewModel๋กœ ์—ญํ•  ๋ถ„๋ฆฌ โ†’ SRP ์ถฉ์‹ค
  • ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ๋ช…ํ™•ํ™”, ์ƒํƒœ ๊ด€๋ฆฌ ์šฉ์ด

Coordinator

  • ํ™”๋ฉด ํ๋ฆ„์„ ๊ฐ์ฒด๋กœ ์œ„์ž„ โ†’ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง ๋ถ„๋ฆฌ
  • SwiftUI NavigationStack ์ค‘์ฒฉ ๋ฌธ์ œ ํ•ด์†Œ

Factory

  • View/ViewModel์˜ ์ƒ์„ฑ ์ฑ…์ž„ ๋ถ„๋ฆฌ
  • ํ™”๋ฉด ์ƒ์„ฑ ํ๋ฆ„ ํ†ต์ผ โ†’ ์œ ์ง€๋ณด์ˆ˜/DI ์šฉ์ด

TCA๋Š” ๋งค๋ ฅ์ ์ธ ์„ ํƒ์ด์ง€๋งŒ, ์ดˆ๊ธฐ ๋„์ž… ์‹œ ๋Ÿฌ๋‹ ์ปค๋ธŒ์™€ DSL ๋ถ€๋‹ด์œผ๋กœ ์ธํ•ด ์ œ์™ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“ฆ ๋ชจ๋“ˆํ™” ์ „๋žต

์ „๋žต ์„ค๋ช… ์žฅ์  ๋‹จ์  ์ „ํ™˜ ์ด์œ 
๋ฉ€ํ‹ฐ ํƒ€๊ฒŸ (Multi Target) ๊ธฐ๊ธฐ๋ณ„ ๋ณ„๋„ ํƒ€๊ฒŸ ๊ตฌ์„ฑ - ๊ฐ ๊ธฐ๊ธฐ ์ตœ์ ํ™”
- ๋…๋ฆฝ์  ๋””๋ฒ„๊น…
- ์„ค์ • ๋ณต์žก
- ์ฝ”๋“œ ์ค‘๋ณต ๊ฐ€๋Šฅ์„ฑ
- ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€
๊ณตํ†ต ๋ชจ๋“ˆ์ด ๋งŽ์•„ ํƒ€๊ฒŸ ๋ถ„๋ฆฌ๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•˜๊ณ  ์ค‘๋ณต๋จ
์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋“ˆํ™” SPM/XCFramework๋ฅผ ํ†ตํ•œ ๋ชจ๋“ˆ ๊ด€๋ฆฌ - ๋†’์€ ์žฌ์‚ฌ์šฉ์„ฑ
- ์ฝ”๋“œ ๋…๋ฆฝ์„ฑ
- ๋ถ„์—… ๊ฐ€๋Šฅ
- ์ดˆ๊ธฐ ์„ค์ • ๋ณต์žก
- ๋นŒ๋“œ ๋А๋ฆผ
- ๋‚ด๋ถ€ ๋ณ€๊ฒฝ ๋ฐ˜์˜ ์ง€์—ฐ
์• ์ž์ผํ•˜๊ฒŒ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ•˜๋Š” ๊ตฌ์กฐ์— ๋งž์ง€ ์•Š์Œ
์ž‘์€ ํŒ€์—์„œ ๊ณผํ•œ ๋ถ„๋ฆฌ ๊ตฌ์กฐ
๋‚ด๋ถ€ ํด๋” ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆํ™” (์„ ํƒ) Presentation, Interaction ๋“ฑ์œผ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ์ค€ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ - ๊ตฌ์„ฑ ๋‹จ์ˆœ
- ๋น ๋ฅธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ๋ฐ˜์˜
- ๋นŒ๋“œ ๋น ๋ฆ„
- ๋ช…์‹œ์  ๋ชจ๋“ˆ ๊ฒฝ๊ณ„ ๋ถ€์กฑ
- ์ˆœํ™˜ ์ฐธ์กฐ ์ฃผ์˜ ํ•„์š”
SwiftUI + MVVM์— ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฝ๊ณ 
๋น ๋ฅธ ์‹คํ—˜๊ณผ ๋ฐ˜๋ณต์— ์ตœ์ ํ™”

โœ… ๋‚ด๋ถ€ ํด๋” ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆํ™” ์„ ํƒํ•œ ์ด์œ 

  • ์ดˆ๊ธฐ ์œ ์—ฐํ•œ ์„ค๊ณ„ ๋ฐ ๋น ๋ฅธ ๋ฐ˜์˜ ์ฃผ๊ธฐ๊ฐ€ ์ค‘์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๋ถ€ ํด๋” ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆํ™” ์ฑ„ํƒ
  • SPM์€ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ”„๋ ˆ์ž„์›Œํฌํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜์ง€๋งŒ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๊ธฐ ๊ฐ„ ์œ ๊ธฐ์  ์—ฐ๊ฒฐ๊ณผ ๋น ๋ฅธ ๋ฐ˜๋ณต ๊ฐœ๋ฐœ์ด ํ•ต์‹ฌ
  • MVVM + Coordinator + Factory ๊ตฌ์กฐ์™€ ๋งž๋ฌผ๋ ค ๋ช…ํ™•ํ•œ ํด๋”๋ง๊ณผ ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง

๐Ÿงญ GitHub Flow ์ „๋žต

gitGraph
   commit id: "v1.0.0"

   branch "feat/#7/InteractionModule"
   checkout "feat/#7/InteractionModule"
   commit id: "๐Ÿ’ฌ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ"
   commit id: "๐Ÿ”ง ํ…Œ์ŠคํŠธ ์™„๋ฃŒ"
   checkout "main"
   merge "feat/#7/InteractionModule" id: "โœ… PR ๋จธ์ง€"

   branch "fix/#12/HomeKitCrash"
   checkout "fix/#12/HomeKitCrash"
   commit id: "๐Ÿž ๋ฒ„๊ทธ ์ˆ˜์ •"
   checkout "main"
   merge "fix/#12/HomeKitCrash" id: "โœ… ๋จธ์ง€ ์™„๋ฃŒ"
Loading
  • main โ†’ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
  • feat/, fix/, refactor/, chore/ โ†’ ๊ธฐ๋Šฅ/์ˆ˜์ •/๋ฆฌํŒฉํ† ๋ง/์„ธํŒ… ๋‹จ์œ„ ๋ธŒ๋žœ์น˜
  • PR ๊ทœ์น™: feat/#7/InteractionModule ๋“ฑ ์ด์Šˆ ๊ธฐ๋ฐ˜ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ + ๋ผ๋ฒจ๋ง

About

๐Ÿ‘‰ ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์ƒ‰๋‹ค๋ฅธ ๊ธฐ๊บผ์ด ๋น„์ฃผ๋ฅ˜๋กœ ๊ฐ„๋‹ค. ๐Ÿ‘ˆ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages