[TIL] 🌼24/04/12🌼#μ•ˆλ“œλ‘œμ΄λ“œ ꢌμž₯ 아킀텍쳐

0

TIL

λͺ©λ‘ 보기
80/104
post-thumbnail
post-custom-banner

[TIL] 🌼24/04/12🌼#μ•ˆλ“œλ‘œμ΄λ“œ ꢌμž₯ 아킀텍쳐

ꢌμž₯ μ•± 아킀텍쳐

  • μ•ˆλ“œλ‘œμ΄λ“œ 곡식 λ¬Έμ„œμ—μ„œ μ†Œκ°œν•˜λŠ” μ•ˆλ“œλ‘œμ΄λ“œ ꢌμž₯ μ•„ν‚€ν…μ³λž€ 무엇인지에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

πŸ“Œμ°Έκ³ λ¬Έμ„œ

  • μ•ˆλ“œλ‘œμ΄λ“œ ꢌμž₯ μ•± 아킀텍쳐 = μ΅œμ†Œ 2개의 λ ˆμ΄μ–΄κ°€ ν¬ν•¨λ˜μ–΄μ•Ό
    • UI λ ˆμ΄μ–΄: 화면에 데이터 ν‘œμ‹œ
    • 도메인 λ ˆμ΄μ–΄(선택): UI λ ˆμ΄μ–΄μ™€ 데이터 λ ˆμ΄μ–΄ κ°„ μƒν˜Έμž‘μš© κ°„μ†Œν™” & μž¬μ‚¬μš©
    • 데이터 λ ˆμ΄μ–΄: μ•±μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 포함, μ•± 데이터 λ…ΈμΆœ

UI λ ˆμ΄μ–΄

  • UI λ ˆμ΄μ–΄μ˜ μ—­ν• :
    • 화면에 데이터 ν‘œμ‹œ
    • μ‚¬μš©μž μƒν˜Έμž‘μš© or μ™ΈλΆ€ μ‘λ‹΅μœΌλ‘œ 데이터가 λ³€ν•  λ•Œλ§ˆλ‹€ UI μ—…λ°μ΄νŠΈ λ˜μ–΄μ•Ό
  • UI λ ˆμ΄μ–΄μ˜ ꡬ성 클래슀:
    • UI Elements: 화면에 데이터 λžœλ”λ§ (ex. XML 파일, Activity/Fragment, Jetpack Compose)
    • State Holders: 데이터 보유 & λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” μƒνƒœ 홀더 (ex. ViewModel)

데이터 λ ˆμ΄μ–΄

  • 데이터 λ ˆμ΄μ–΄μ˜ μ—­ν• :
    • μ•±μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 포함
      (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직: μ•± 데이터 생성, μ €μž₯, 변경을 κ²°μ •ν•˜λŠ” κ·œμΉ™)
  • 데이터 λ ˆμ΄μ–΄μ˜ ꡬ성 클래슀:
    • Repositories: 데이터 μ†ŒμŠ€λ₯Ό ν¬ν•¨ν•˜λŠ” μ €μž₯μ†Œ, 데이터 μœ ν˜• λ³„λ‘œ μ €μž₯μ†Œ 클래슀 λ§Œλ“€μ–΄μ•Ό
      (ex. μ˜ν™” κ΄€λ ¨ 데이터, 결제 κ΄€λ ¨ 데이터)
      • μ•±μ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 데이터 λ…ΈμΆœ
      • 데이터 변경사항을 ν•œ 곳에 집쀑
      • μ—¬λŸ¬ 데이터 μ†ŒμŠ€ κ°„ 좩돌 ν•΄κ²°
      • μ•±μ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„μ—μ„œ 데이터 μ†ŒμŠ€ 좔상화
      • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 포함
    • Data Sources: 데이터 μ†ŒμŠ€ λ³„λ‘œ 데이터 μ†ŒμŠ€ 클래슀 λ§Œλ“€μ–΄μ•Ό
      (ex. 파일, λ„€νŠΈμ›Œν¬ μ†ŒμŠ€, 둜컬 데이터 베이슀)

도메인 λ ˆμ΄μ–΄

  • UI λ ˆμ΄μ–΄μ™€ 데이터 λ ˆμ΄μ–΄ 사이 선택적 λ ˆμ΄μ–΄
    • λ³΅μž‘ν•œ λΉ„μŠ€λ‹ˆμŠ€ 둜직 μΊ‘μŠν™”
    • ViewModelμ—μ„œ μž¬μ‚¬μš©λ˜λŠ” κ°„λ‹¨ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μΊ‘μŠν™”
  • 도메인 λ ˆμ΄μ–΄μ˜ ꡬ성 클래슀:

    • Use cases/Interactors: ν•˜λ‚˜μ˜ μ‚¬μš© 사둀/μƒν˜Έμž‘μš©μž ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ κΈ°λŠ₯을 λ‹΄λ‹Ήν•΄μ•Ό
      • μ‚¬μš© 사둀 클래슀 넀이밍 μ»¨λ²€μ…˜: 동사 + λŒ€μƒ + UseCase (ex. FormatDateUseCase)
      • 일반적으둜 μ €μž₯μ†Œ ν΄λž˜μŠ€μ— 쒅속적
      • kotlin invoke operatorλ₯Ό κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš© 사둀 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό callableν•˜κ²Œ κ΅¬ν˜„
  • μ‚¬μš© 사둀 클래슀 예:

    class FormatDateUseCase(userRepository: UserRepository) {
    
       private val formatter = SimpleDateFormat(
           userRepository.getPreferredDateFormat(),
           userRepository.getPreferredLocale()
       )
    
       operator fun invoke(date: Date): String {
           return formatter.format(date)
       }
    }
    class MyViewModel(formatDateUseCase: FormatDateUseCase) : ViewModel() {
       init {
           val today = Calendar.getInstance()
           val todaysDate = formatDateUseCase(today)
           /* ... */
       }
    }
post-custom-banner

0개의 λŒ“κΈ€