- λ‘λ²νΈ C.λ§ν΄ (Uncle Bob) μ βThe Clean Architectureβ λΌλ μ΄λ¦μ κΈλ‘ 12λ 8μ 13μΌμ μ²μ μΈμμ λͺ¨μ΅μ λλ¬λλ€.
- μ΅μ’ λͺ©μ μ κ³μΈ΅μ λΆλ¦¬νμ¬ κ΄μ¬μ¬λ₯Ό μμ ν λΆλ¦¬νλ κ²μ μλ€.
- μ μ΄λ κ²λ λ§μ νλ‘κ·Έλλ° μΈμ΄μ νλ μμν¬κ° μλκ±°μ§?
- λꡬμκ² κ³ μμ€ νλ‘κ·Έλλ° μΈμ΄κ° νμνμ§?
- κΈ°κ³λ μ μμ€ μ΄μ λΈλ¦¬ λ³΄λ€ κ³ μμ€ μΈμ΄λ₯Ό μ νΈνλ?
- λΉμ μ νλ‘μ νΈμμ μ λ§ μμ μμ μΈλ° λλ €μμ κ°μ‘λ μ μ΄ μλκ°?
- λΉμ μ΄ μμ±ν μκ°μ΄ μ’ μ§λ μ½λλ₯Ό λ€μ μ΄ν΄νκΈ° μν΄ μΌλ§λ λ§μ μκ°μ μλΉνλκ°?
- μλ‘μ΄ λλ£μκ² λΉμ μ νλ‘μ νΈμ μν€ν μ³λ₯Ό μ€λͺ νκΈ° μν΄ μΌλ§λ λ§μ μκ°μ΄ νμνκ°?
- μλ‘μ΄ κΈ°λ₯μ΄ μΆκ°λκ±°λ λ΄λΆ λ‘μ§μ΄ λ³κ²½λμ΄μΌ ν λ μ μ°νκ² λμ²ν μ μλλ‘ κ΅¬μ‘°νν μ μλ€.
- νλ μμν¬ λ 립μ , μμ€ν μ νλ μμν¬μ νμ λ μ μ½μ μ΅μ§λ‘ μ§μ΄λ£λ λμ λꡬλ‘μ μ¬μ©ν μ μλ€.
- UI λ 립μ , UI λ³κ²½ μ UI μΈμ λΆλΆμ λ³κ²½ν νμκ° μ ν μλ€.
- λ°μ΄ν°λ² μ΄μ€ λ
립μ , μ¬μ§μ΄ SQL μμ NoSQLμΌλ‘ λ³κ²½ν΄λ μλ¬΄λ° μ§μ₯μ΄ μλ€.
(μλλ‘μ΄λμ κ²½μ°λ Realm μ΄λ Room μ΄λ μκ΄μ΄ μλ€!)
- μ¬μ΄ ν μ€νΈ, μΈλΆ μμΈ μμ΄ ν μ€νΈ κ°λ₯νκ³ , μ¬μ§μ΄ ν μ€νΈ μλλ λΉ λ₯΄λ€!
- κ²°λ‘ μ μΌλ‘, λΉμ¦λμ€ λ³κ²½ μ¬νμ μ΅λν λΉ λ₯΄κ² λμνλ©° μμ€ν κ²½μλ ₯μ λμΌ μ μμ΄μΌ νλ€.
- κ·Έλ κ² νλ €λ©΄, λͺ¨λμ μ μ ν κ²½κ³λ‘ λλμΌλ‘μ ν λͺ¨λμ λν΄ λ³κ²½μ¬νμ΄ μκΈ°λ©΄ λ€λ₯Έ λͺ¨λμ 건λ릴 μΌμ΄ μμ΄ κ·Έ λͺ¨λλ§ κ±΄λ€κ²λ μ€κ³ν΄μΌ νλ€.
- μ’μ μν€ν
μ²λ ν΄κ³Ό νλ μμν¬μ λν κ²°μ μ¬νμ μ΅λν λ€λ‘ λ―Έλ£° μ μμ΄μΌ νλ€.
(DB, μΉμλ², DI λ±)
- λΉμ¦λμ€ λ‘μ§μ΄λ?
- νλμ νλ‘μ νΈλ νλ‘κ·Έλ¨ μ€ μ 무μ κ΄λ ¨λ μ²λ¦¬λ₯Ό νλ μΌλΆλΆμ λ»νλλ° νλ‘μ νΈλ₯Ό νλ©΄μ λ°μ΄ν°λ² μ΄μ€μμ μ΄λ ν μλ£λ₯Ό κ°μ Έμμ μΉμμ μΆλ ₯μ ν λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°, ν΅μ , μλ£κ°κ³΅, νμ΄μ§ ꡬμ±λ± μ¬λ¬ μμ μ νμ§λ§ κ·Έ μ€μμ μ¬μ©μκ° μνλ μλ£μ κ°κ³΅ λΆλΆμ μλ―Ένλ€. μ¦, μ΄λ»κ² λ°μ΄ν°κ° μμ±, μ μ₯λκ³ μμ λλμ§λ₯Ό μ μν κ²
- λκ° λ°κΉ₯μͺ½μΌλ‘ ν₯ν μλ‘ κ³ μμ€μ μννΈμ¨μ΄κ° λλ κ²½μ°κ° λ§λ€.
- μ΄ λ λ°κΉ₯μͺ½ μμ λ©μ»€λμ¦μ΄κ³ μμͺ½μ μμ μ μ± μ΄λ€.
- μμ μν€ν μ²λ₯Ό κ°λ₯νκ² νλ μ€μ κ·μΉμ λ°λ‘ μμ‘΄ κ·μΉμ΄λ€.
- κ·μΉμ μν΄μ μμ€ μ½λλ μμͺ½μ ν₯ν΄μλ§ μμ‘΄ν μ μκ³ , μμͺ½μ μμ λ°κΉ₯μͺ½ μμ λν΄ μ ν μμ§ λͺ»νλ€.
- λ°κΉ₯μͺ½ μμμ μ μΈλ μ΄λ€ μμλ₯Ό μμͺ½ μμμλ μ°Έμ‘°νκ±°λ μν₯μ μ€μλ μ λ μλλ€.
- μ 리νλ©΄, κ°κ° ν΄λμ€λ ν κ°μ§ μν λ§ μννκ² λ§λ€κ³ , μλ‘μ μμ‘΄ κ΄κ³λ₯Ό μ΄λ»κ² ν μ§ κ·μΉμ μ ν΄μ£Όμ΄μΌ νλ€.
.equals("μμ‘΄μ± κ·μΉ")
- λ©μ»€λμ¦? μ μ±
?
- λ©μ»€λμ¦ : μ΄λ€ μΌμ μ΄λ»κ² ν κ²μΈκ°λ₯Ό κ²°μ (How)
- μ μ± : 무μμ ν κ²μΈκ°λ₯Ό κ²°μ (What)
- μλ₯Ό λ€μ΄ μλλ‘μ΄λμμ κ²μ κΈ°λ₯μ ꡬννλ€κ³ νμ λ, μ μ κ° κ²μ λ²νΌμ λλ₯΄λ©΄ μ μ μ
μ₯μμλ ν λ²μ κ²μ κ²°κ³Όκ° λμ€λ κ²μ²λΌ 보μ΄μ§λ§, μ€μ λ‘λ λ΄λΆ λΉμ¦λμ€ λ‘μ§μ μν΄ κ²μ κ²°κ³Όκ° μΆμΆλλ€. λ§μ½ μμ ν΄λ¦° μν€ν
μ²λ₯Ό λ°λΌκ°λ©΄ λ°κΉ₯μͺ½ μμΈ
View
μμλ λ¨μνκ² κ²°κ³Όλ₯Ό λ°μμ 보μ¬μ£ΌκΈ°λ§ νλ©΄ λμ§λ§, μμͺ½μμλ κ²μκ°μ λ°μμ μ΄λ»κ² μ²λ¦¬ν μ§ κ²°μ ν΄μΌ νλ€.
- λΉμ¦λμ€ κ·μΉμ μΊ‘μννλ€.
- λ©μλλ₯Ό κ°λ κ°μ²΄μΌ μλ μμΌλ λ°μ΄ν° ꡬ쑰, ν¨μμ μ§ν©μΌ μλ μλ€.
- κ°μ₯ μΌλ°μ μ΄λ©΄μ κ³ μμ€μ κ·μΉμ μΊ‘μννλ€.
- λ°κΉ₯μͺ½μμ μ΄λ€ κ²μ΄ λ³κ²½λλλΌλ μ λ λ°λμ§ μλλ€.
- μ ν리μΌμ΄μ
μ΄ μ΄λ€ λμμ νλλΌλ
Entity
κ³μΈ΅μλ μν₯μ μ£Όμ΄μ μλλ€.
- μ ν리μΌμ΄μ
μ κ³ μ λΉμ¦λμ€ κ·μΉμ ν¬ν¨νλ©°, μμ€ν
μ λͺ¨λ
Usecase
λ₯Ό μΊ‘μννκ³ κ΅¬ννλ€. Entity
μ λ°μ΄ν° νλ¦μ λμμ μ μ΄νλ€.- λΉμ°ν, μ¬κΈ°μ λ³κ²½μ΄ μΌμ΄λλλΌλ
Entity
μκ²λ μν₯μ μ£Όμ§ μμμΌ νλ€. - λν, λ°μ΄ν°λ² μ΄μ€ - UIμμ λ³κ²½μ΄ μΌμ΄λλλΌλ μν₯μ λ°μ§ μμμΌ νλ€.
- κ°λ°μμκ² μ€μν κ²μ
Usecase
κ° μ ννκ² λμνλ κ²μ΄λ€. Usecase
μ λμ κ²°κ³Όλ₯Ό νμΈνλ μμ μ μ§νν λ UIλ₯Ό νμλ‘ νλ κ²½μ°λ μμ΄μΌ νλ€.Interactors
λΌκ³ λ μΉν΄μ§λ€.
View
λ± μΈλΆμ κΈ°λ₯ νΉμ μ¬μ© μ€μΈ νλ μμν¬μ μ©μ΄ν νμμΌλ‘ λ°μ΄ν°λ₯Ό λ³ννλ€.- μλλ‘μ΄λμ MVVM ν¨ν΄μμλ
ViewModel
μμμ΄λ€. Model
βUsecase
βViewModel
λ‘ λμκ°λ λ°μ΄ν° κ΅¬μ‘°μΌ κ°λ₯μ±μ΄ λλ€.- κ²°λ‘ μ μΌλ‘ μμν λΉμ¦λμ€ λ‘μ§λ§μ λ΄λΉνλ μν μ νλ€.
- λ°μ΄ν°λ² μ΄μ€, μΉ νλ μμν¬ λ±μ΄ μμΉν΄μλ€.
- μΉμ΄λ , λ°μ΄ν°λ² μ΄μ€λ μμΈν μ 보λ λͺ¨λ μ΄ κ³³μ λλ€.
- μμͺ½μ μκ³Ό ν΅μ ν μ°κ²° μ½λ μΈμλ λ³λ€λ₯Έ μ½λλ₯Ό μμ±νμ§ μλλ€.
- UIμλ λ΄κ° νκ³ μ νλ κ²λ€(
Usecase
) λ₯Ό ꡬννλ κ²μ΄ μλλΌ, μ€λ‘μ§ μΈλΆμ¬νμ΄λ€. - UIλ λ¨μ§ λ΄κ° 무μΈκ°λ₯Ό μ¬μ©μλ€μκ² λ³΄μ¬μ€ λλ νμν κ²μ΄λ€.
- 2012λ ν΄λ¦° μν€ν μ²μ κ΄ν κΈμ΄ μ²μ 곡κ°λ μ΄ ν, μ΄λ»κ² νλ©΄ λͺ¨λ°μΌ μ€κ³μμ ν΄λ¦° μν€ν μ²μ λμμ λ°μ μ μμμ§ λ§μ λ Όμκ° μμλ€.
- κ²°κ³Όμ μΌλ‘ λ€ κ°μΈ κ³μΈ΅μ μ¬κ΅¬μ±νμ¬ μΈ κ°μ κ³μΈ΅μΌλ‘ λΆλ¦¬νλ κ²μΌλ‘ μΌλ°νλμλ€.
- κ° κ³μΈ΅μ΄ μ체 λ°μ΄ν° λͺ¨λΈμ μ¬μ©νλ―λ‘ κ³μΈ΅ κ° λ
립μ±μ ν보ν μ μλ€λ κ²μ΄ μ€μνλ€.
- μ΄ λ κ³μΈ΅ κ° λ°μ΄ν° λ³νμ μννκΈ° μν΄
Mapper
κ° νμν΄μ§λ€.
- μ΄ λ κ³μΈ΅ κ° λ°μ΄ν° λ³νμ μννκΈ° μν΄
- λΉμ¦λμ€ λ‘μ§μ ν¬ν¨νκ³ μμΌλ©°, μ΄μ νμν
Entity
μUsecase
,Repository
λ₯Ό ν¬ν¨νλ€. Domain
λ μ΄μ΄λPresentation
λ μ΄μ΄,Data
λ μ΄μ΄μ μ΄λ€ μμ‘΄μ±λ λ§Ίμ§ μμμΌ νλ€.- μμ μ½νλ¦° νΉμ μλ° μ½λλ‘ κ΅¬μ±λμ΄ μμ΄ λ€λ₯Έ νλ μμν¬μμλ μ μ°νκ² μ¬μ©μ΄ κ°λ₯νλ€.
- κ° κΈ°λ₯ νΉμ λΉμ¦λμ€ λ Όλ¦¬ λ¨μλ‘ κ΅¬μ±λλ€.
- μ΄λ¦λ§ λ³΄κ³ μ΄λ€ κΈ°λ₯μ μννλμ§ μ§μν μ μμ΄μΌ νλ€.
Presentation
λ μ΄μ΄μ UIμμ μ΄λ€ μ΄λ²€νΈ νΉμ λμμ μν΄ νΈμΆλλ λ°©ν₯μΌλ‘ μ€κ³νλ€.Data
λ μ΄μ΄μμ μ€μ λ°μ΄ν°λ₯Ό μ΄λ»κ² κ°μ Έμ¬μ§ μ μλ νμ§ μκ³ , ν΄λΉ λ©μλλ₯Ό νΈμΆνλ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ€.
Data
λ μ΄μ΄μEntity
λ₯ΌDomain
λ μ΄μ΄μModel
λ‘ λ³ννλ μν μ μννλ€.
Domain
λ μ΄μ΄μμλ μΈν°νμ΄μ€λ‘ μ μνκ³ , μ€μ ꡬνμData
λ μ΄μ΄μμ μ§νλλ€.
- μ ν리μΌμ΄μ μ μ€μ§μ λ°μ΄ν°κ° μ¬κΈ°μ ꡬνλλ€.
- μλλ‘μ΄λμ μμ‘΄μ±μ κ°μ§κ³ μμ΄μ μλκ³ , λ€λ₯Έ νλ‘μ νΈμμλ λμΌνκ² μ¬μ©ν μ μλ ν΄λμ€λ₯Ό μμ±ν΄μΌ νλ€.
Data
λ μ΄μ΄λDomain
λ μ΄μ΄μ μμ‘΄μ±μ μ§λκ³ μλ€.
Usecase
κ° νμλ‘ νλ λ°μ΄ν° μ μ₯, μμ λ±μ κΈ°λ₯μ μ 곡νλ€.- μμ
Domain
λ μ΄μ΄μμ μ€κ³νRepository
λ₯Ό μ€μ λ‘ κ΅¬ννλ€.
- μ€μ λ°μ΄ν°μ μ μΆλ ₯μ μ§ννλ€.
Room
μ μ¬μ©νλ€κ³ κ°μ νλ©΄Dao
λ₯Ό μ΄ λΆλΆμμ μ κ·Όνκ³ κ²°κ³Όλ₯Ό μΆλ ₯νλ€.
Domain
λ μ΄μ΄μModel
κ³Όλ λ€λ₯΄κ², REST APIμ μμ²/μλ΅μ μνJSON
, λ‘컬 DBμ μ μ₯νκΈ° μν ν μ΄λΈμ μ μ₯νκΈ° μν λ°μ΄ν°λ₯Ό μ μνλ€.
- λ΄λΆμ μΌλ‘ νλ μμν¬ μμ‘΄μ±μ μ²λ¦¬νκΈ° μν΄
MVP
νΉμMVVM
ν¨ν΄μ μ¬μ©νλ€. Acitivity
,Fragment
,Presenter
,ViewModel
μ ν¬ν¨νλ€.
- UI ꡬνκ³Ό μ¬μ©μ μ λ ₯λ§μ λ΄λΉνλ€.
- νλ©΄μ κ·Έλ €μ§λ κ²μ΄ μ΄λ€ μλ―Έκ° μλμ§λ μ ν μμ§ λͺ»ν΄μΌ νλ€.
- λ°μ΄ν°λ₯Ό μ§λκ³ μλλΌλ νλ©΄κ³Ό κ΄λ ¨λ λ°μ΄ν°λ§ μ§λκ³ μμ΄μΌ νλ€.
(e.g. : νλ©΄μ μ’ν)
View
μ λ¬λ¦¬ νλ«νΌ(e.g. : μλλ‘μ΄λ)
μ μ§μ μ μΌλ‘ μμ‘΄νμ§ μμΌλ―λ‘ λ¨μ ν μ€νΈκ° κ°λ₯νλ€.- λν νλ©΄μ κ·Έλ €μ§λ κ²μ΄ μ΄λ€ μλ―Έλ₯Ό κ°μ§κ³ μλμ§ μκ³ μλ€.
- μ¬μ©μ μ λ ₯μ΄ μμ λ μ΄λ€ λ°μμ ν΄μΌνλμ§μ λν νλ¨λ μ΄ κ³³μμ μ§ννλ€.
Domain
λ μ΄μ΄μUsecase
λ₯Ό μ£Όμ λ°μ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€.- λΉμ°ν,
Data
λ μ΄μ΄μ μμ‘΄μ±μ΄ μκΈ° λλ¬Έμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ³Όμ μ μ κ·Όν μ μλ€.
- λ°μ΄ν°λ² μ΄μ€κ° μ€μ μ΄ λλ κ²μ΄ μλλΌ, μ±μ ννν λͺ¨λΈμ΄ μ€μν κ²μ΄λ€. λ°μ΄ν°λ² μ΄μ€λ μ€λ‘μ§ λΆμμ μΈ κ²μ΄λ€.
- νμ 리μ€νΈκ° μλ€κ³ νμ λ, μ ν리μΌμ΄μ μ (μ΄λ¦ - λμ΄ - νκ΅) λ₯Ό ννν μ§, (μ΄λ¦ - λμ΄)λ§ ννν μ§κ° μ€μνμ§ κ·Έ λ°μ΄ν°λ₯Ό λ΄μ λ°μ΄ν°λ² μ΄μ€λ 무μμ΄κ±΄ μκ΄μ΄ μλ€.
- λͺ¨λ μν€ν μ²μ μ§ν₯μ μ κ²°κ΅ κ°λ° μ€ μμ μ¬νμ΄ μκ²Όμ λ λ³κ²½μ μ μ΅μννλ κ²μ΄λ€.