λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 VS UI 둜직

πŸ’‘μ•ˆλ“œλ‘œμ΄λ“œ μ•„ν‚€ν…μ²˜μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI λ‘œμ§μ— λŒ€ν•˜μ—¬ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

κ°œμš”

μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œλŠ” λ‹€μ–‘ν•œ Architecture Sample을 μ œκ³΅ν•©λ‹ˆλ‹€. μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ— λ”°λΌμ„œ λ‹€μ–‘ν•œ λ‘œμ§μ„ λΆ„λ¦¬ν•˜κ²Œ λ˜λŠ”λ°, κ·Έ μ€‘μ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI λ‘œμ§μ€ 각기 λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•˜λŠ” μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ 적용되고 μžˆμŠ΅λ‹ˆλ‹€. 이 λ‘κ°œλ…μ€ μ„œλ‘œ λ‹€λ₯Έ μ±…μž„μ„ 가지고 있으며, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜λ₯Ό κΉ”λ”ν•˜κ³  μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

https://github.com/android/architecture-samples/blob/130f5dbebd0c7b5ba195cc08f25802ed9f0237e5/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt#L47

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 vs UI 둜직

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직

  • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ μ•± 데이터에 λŒ€ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬ 사항을 κ΅¬ν˜„ν•˜λŠ” κ²ƒμœΌλ‘œ, 주둜 도메인 λ˜λŠ” 데이터 λ ˆμ΄μ–΄μ— μœ„μΉ˜ν•©λ‹ˆλ‹€.
  • 무엇을 ν•΄μ•Όν•˜κ³ , μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ” 지λ₯Ό κ²°μ •ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
  • UIλ‚˜ ν”Œλž«νΌμ— μ˜μ‘΄ν•˜μ§€ μ•Šμ•„μ•Ό ν•˜λ©°, μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•œ λ‘œμ§μ„ λ§ν•©λ‹ˆλ‹€.

UI 둜직

  • ν™”λ©΄μ—μ„œ μƒνƒœ 변경을 μ–΄λ–»κ²Œ ν‘œμ‹œν•  지에 κ΄€ν•œ κ²ƒμœΌλ‘œ Android Resourcesλ₯Ό μ‚¬μš©ν•˜μ—¬ μ μ ˆν•œ ν…μŠ€νŠΈλ₯Ό 화면에 ν‘œμ‹œν•˜κ±°λ‚˜, νŠΉμ • ν™”λ©΄ 이동과 μ‚¬μš©μžμ—κ²Œ λ©”μ‹œμ§€ ν‘œμ‹œν•˜λŠ” 것 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • νŠΉμ • UI ν”„λ ˆμž„μ›Œν¬μ™€ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ 있으며, νŠΉμ • ν”Œλž«νΌμ— μ’…μ†μ μž…λ‹ˆλ‹€.

MVP의 Passive View

  • MVP νŒ¨ν„΄μ—μ„œ μ‚¬μš©λ˜λŠ” κ°œλ…μΈ Passive ViewλŠ” Viewκ°€ κ°€λŠ₯ν•œ μ΅œμ†Œν•œμ˜ 둜직만 μ²˜λ¦¬ν•˜κ³ , λͺ¨λ“  λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ Presenterκ°€ λ‹΄λ‹Ήν•˜λŠ” ꡬ쑰λ₯Ό λ§ν•©λ‹ˆλ‹€.
  • ViewλŠ” λ‹¨μˆœνžˆ UI μš”μ†Œλ₯Ό ν‘œμ‹œν•˜κ³ , μ‚¬μš©μž μž…λ ₯을 Preserter둜 μ „λ‹¬ν•˜λŠ” μˆ˜λ™μ μΈ μ—­ν• λ§Œμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

Passive ViewλŠ” λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ³„ λ™μž‘μ΄ ν¬ν•¨λœ ν™”λ©΄κ³Ό μ»΄ν¬λ„ŒνŠΈλ₯Ό 컨트둀러둜 μΆ”μΆœν•˜μ—¬ μœ„μ ―μ˜ μƒνƒœλ₯Ό μ»¨νŠΈλ‘€λŸ¬κ°€ μ „μ μœΌλ‘œ μ œμ–΄ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이 λ•Œ 핡심은 λ·°λ₯Ό κ°€μž₯ λ‹¨μˆœν•œ μƒνƒœλ‘œ μœ μ§€ν•˜μ—¬, ν…ŒμŠ€νŠΈ κ°€λŠ₯μ„±κ³Ό ν™•μž₯성을 λ†’μ΄λŠ” ꡬ쑰λ₯Ό μ™„μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Resource Provider

  • UI λ‘œμ§μ„ 효과적으둜 λΆ„λ¦¬ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯성을 높이기 μœ„ν•΄ UI 수λͺ… μ£ΌκΈ°λ₯Ό λ”°λ₯΄λŠ” μƒνƒœ 홀더 클래슀λ₯Ό μ œκ³΅ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

[Android] Resource Provider

 

[Android] Resource Provider

πŸ’‘μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μ‰½κ²Œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” Resource Provider에 λŒ€ν•˜μ—¬ κΈ°λ‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€. Resource ProviderResource ProviderλŠ” μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό 더 μ‰½κ²Œ κ΄€λ¦¬ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯성을

jinudmjournal.tistory.com

λΆ„λ¦¬ν•˜λŠ” 이유?

μœ μ§€λ³΄μˆ˜μ„± ν–₯상

  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI 둜직이 λΆ„λ¦¬λ˜μ–΄ 있으면 νŠΉμ • λ‘œμ§μ„ 변경해도 UI μ½”λ“œμ— 영ν–₯을 주지 μ•ŠμœΌλ©°, UIλ₯Ό 변경해도 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž¬μ‚¬μš©μ„± 증가

  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 UI와 λ…λ¦½μ μœΌλ‘œ μž‘μ„±λ˜λ©΄ μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ 같은 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μš©μ΄μ„±

  • UI λ‘œμ§μ€ μ’…μ’… ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš°λ©°, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ UIμ—μ„œ 뢄리할 수둝 λ…λ¦½μ μœΌλ‘œ λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•΄μ Έ ν…ŒμŠ€νŠΈ μž‘μ„±μ΄ μ‰½μŠ΅λ‹ˆλ‹€.

클린 μ•„ν‚€ν…μ²˜

  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI 둜직의 λΆ„λ¦¬λŠ” 클린 μ•„ν‚€ν…μ²˜λ‚˜ μ•ˆλ“œλ‘œμ΄λ“œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ—μ„œ μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ μž‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.