๐ฅด1. ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ๋ ?
- ๊ตฌ์ฑ ์์๋ค ๊ฐ์ ์ ๊ธฐ์ ๊ด๊ณ๋ฅผ ํํํ๊ณ , ์๊ตฌ์ฌํญ์ ํด๊ฒฐํ๋ ค๋ ๊ณํ ๊ณผ์ ๋ฑ์ ์์น์ ๋ํ๋ธ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ง๋ณด์๊ฐ ํ์์ด๋ค. ์๋ํ๋ฉด ์๋๋ก์ด๋ ํ๋ซํผ ๋ฒ์ ๊ณผ ํธํ๋์ง ์๊ฑฐ๋ ๋ง์ผ ์ ์ฑ
์์ ์ด์ ๋ก ์ฑ์ด ์ ๊ธฐ๋ฅ์ ํ์ง ์๋๋ค๋ฉด ์ ๊ธฐ๋ฅ์ ํ์ง ๋ชปํ๋ค.
๐ฅฑ2. ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๊ณ ์์น?
- 2000๋
๋ SOLID 5๊ฐ์ง ์์น
- ๊ฐ ์์น์ ๋จธ๋ฆฌ ๊ธ์๋ฅผ ๋ฐ์ ๋ง๋ ๋ช
์นญ
- ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ํ์ฅ์ด ์ฌ์ด ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ์ง์นจ
1) ๋จ์ผ ์ฑ
์ ์์น(Single Responsibility Principle)
- ๋ชจ๋ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ง๋ฉฐ, ํด๋์ค๋ ๊ทธ ์ฑ
์์ ์์ ํ ์บก์ํ ํจ์ ๋งํ๋ค.
- ๋จ์ผ ์ฑ
์ : ์ด๋ค ํด๋์ค๋ ๋ชจ๋ ๋๋ ๋ฉ์๋๊ฐ ๋จ ํ๋์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ผ ํจ์ ๋งํ๋ค.
์ฆ, ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ฑ
์์ด ์๋ ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค.
2)๊ฐ๋ฐฉ ํ์ ์์น (Open Closed Principle)
- ์ํํธ์จ์ด๊ฐ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค์์ด์ผ ํ๊ณ ์์ ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํ๋ค๋ ์์น์ด๋ค.
- ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ์ฝ๋๋ ๋ชจ๋์ ์ํฅ์ด ์๋๋ก ํ๋๊ฒ์ด๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ธฐ๊ฐ ์ฉ์ดํด์ง๋ค.
- ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ์ธ ์์น
3) ๋ฆฌ์ค์ฝํ ์นํ ์์น( Liskov Substitution Principle)
- ์นํ์ฑ : ํด๋์ค S ๊ฐ ํด๋์ค T ์ ์์ ํด๋์ค๋ผ๋ฉด ๋ณ๋ค๋ฅธ ๋ณ๊ฒฝ ์์ด ๋ถ๋ชจ ํด๋์ค T๋ฅผ ์์ ํด๋์ค S ๋ก ์นํํ ์ ์์ด์ผ ํ๋ค๋ ์์น. ์ฆ ๋ค์ด ์บ์คํ
๋ ์ธ์คํด์ค๊ฐ ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ทธ ์ญํ ์ด ๋ฌธ์ ๊ฐ ์์ด์ผํ๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํน์ง์ ๊ดํ ๋ช ๊ฐ์ง ํ์ค์ ์ธ ์๊ตฌ์ฌํญ์ ๊ฐ์ ํ๋ค.
-ํ์ ํด๋์ค์์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ๋ฐ๊ณต๋ณ์ฑ
-ํ์ ํด๋์ค์์ ๋ฐํํ์ ๊ณต๋ณ์ฑ
-ํ์ ํด๋์ค์์ ๋ฉ์๋๋ ์์ ํด๋์ค ๋ฉ์๋์์ ๋์ ธ์ง ์์ธ ์ฌํญ์ ์ ์ธํ๊ณ ์๋ก์ด ์์ธ ์ฌํญ์ ๋์ง๋ฉด ์๋จ
-ํ์ ํด๋์ค์์ ์ ํ ์กฐ๊ฑด์ ๊ฐํ๋ ์ ์์
-ํ์ ํด๋์ค์์ ํํ ์กฐ๊ฑด์ ์ฝํ๋ ์ ์์
-ํ์ ํ์์ ์์ ํ์ ๋ถ๋ณ ์กฐ๊ฑด์ ๋ฐ๋์ ์ ์ง๋์ด์ผ ํ๋ค
- ๋ค์๊ณผ ๊ฐ์ด ์ฐจ๋ก๋ก ์์๋ฐ๋ ํ์
์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค
A <- B <- C
public class A{}
public class B extends A{}
public class C extends B{}
- ๊ณต๋ณ์ฑ
List<?extends B> ๋ B๋ฅผ ์์๋ฐ๋ ํ์
์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๊ฐ ์๋ค๋ฉด List<C>๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ด์ฉ์ด๋ค.
- ๋ฐ๊ณต๋ณ์ฑ
-List<? extends B>๋ ๋ฆฌ์คํธ๊ฐ ์์๋ List<A>๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด๋ค. ๋ฌผ๋ก A ์ ๋ถ๋ชจํ์
์ผ๋ก๋ ์นํ์ด ๊ฐ๋ฅํ๋ค
4) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
-์ด๋ ํ ํด๋์ค๊ฐ ์์ ์ด ์ด์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์์์ผ ํ๋์์น
-ํฐ๋ฉ์ด๋ฆฌ์ ์ธํฐํ์ด์ค๋ค์ ๊ตฌ์ฒด์ ์ด๊ณ ์์ ๋จ์๋ค๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ ํด๋์ค๋ค์ด ๊ผญ ํ์ํ ๋ฉ์๋๋ค๋ง ์ด์ฉํ ์ ์๊ฒ ํ๋ค.
-์ญํ ์ธํฐํ์ด์ค : ์์ ๋จ์๋ก ๋ฉ์๋ ๋ค๋ก ๊ตฌ์ฑ๋ ์ธํฐํ์ด์ค
-fly() ๋ฉ์๋๋ฅผ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ๊ณ ๋ ์ ์๋ ์์๋ง ๊ตฌํํจ์ผ๋ก ์จ ํญ๊ท์ ์ฌ์ฉํ์ง ์๋ fly() ๋ฉ์๋๋ฅผ ๊ฐ์ง์ง ์์์ ์์ด ISP ์์น์ ์งํฌ์ ์๊ฒ ๋์๋ค.
- ๋
์๋ฆฌ๋ฅผ ํด๋์ค๋ก ํํํ๋ ์์
public abstract class Bird{
abstract void fly();
abstract void cry();
}
public class Eagle extends Bird{
@Override
public void fly(){...}
@Override
public void cry(){...}
}
- ํญ๊ท์ ํด๋์ค๋ก ํํํ๋ ์์
public abstract class Bird{
abstract void cry();
}
public interface Flyable{
void fly();
}
public abstract class FlyableBird extends Bird implements Flyable{
...
}
public class Eagle implements FlyableBird{
@Override
public void fly(){...}
@Override
public void cry(){...}
}
public class Penguin extends Bird{
@Override
public void cry(){...}
}
5)์์กด ์ญ์ ์์น( Dependency Inversion Principle)
-๋ชจ๋๋ค์ ๋ถ๋ฆฌํ๋ ํน์ ํ์์ ์ง์นญํ๋ค
-์์ ๊ณ์ธต์ด ํ์ ๊ณ์ธต์ ์์กดํ๋ ์ ํต์ ์ธ ์์กด๊ด๊ณ๋ฅผ ์ญ์ ํจ์ผ๋ก์จ ์์ ๊ณ์ธต์ด ํ์๊ณ์ธต์ ๊ตฌํ์ผ๋ก๋ถํฐ ๋
๋ฆฝ๋๊ฒ ํ ์ ์๋ค.
-๋ค์๊ณผ ๊ฐ์ ์์น์ ๊ฐ๊ณ ์๋ค
5-1) ์์ ๋ชจ๋์ ํ์ ๋ชจ๋์ ์์กดํด์๋ ์๋๋ค. ์์ ๋ชจ๋๊ณผ ํ์ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
5-2) ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํด์๋ ์๋๋ค. ์ธ๋ถ์ฌํญ์ด ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
โ ์์์ ํ์ ๋ชจ๋๊ฐ ๋์ผํ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค. ๋ ๊ฐ์ฒด ์งํฅ์ ์ค๊ณ์ ๋์์น์ ์ ๊ณตํจ.
-์์ 1) ์์ ์ ํฐ์ ํฐ๋ง๋ค ์ ์ฉ ์ถฉ์ ๊ธฐ๊ฐ ์กด์ฌ ํ๋ค ์ ์ฉ ์ถฉ์ ๊ธฐ ์ธ์ ๋ค๋ฅธ ์ถฉ์ ๊ธฐ๋ ํธํ๋์ง ์์๋๋ฐ ์ด ๊ธฐ๊ธฐ๋ ์ ์ฉ ์ถฉ์ ๊ธฐ์ ๊ฐํ ์์กด์ฑ์ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
-์์ 2) ์์ฆ ์๋๋ก์ด๋ ํฐ์ C ํ์
๋จ์๋ผ๋ฉด ์ด๋ ์ ์กฐ์ฌ์ ๊ฒ์ ๋ผ์๋ ํธํ์ด ๋๋ค. ์ ์ฉ ์ถฉ์ ๊ธฐ๊ฐ ํ์๊ฐ ์์ผ๋ฉฐ ์ด๋ ์ ์กฐ์ฌ์ ๊ฒ์ ๋ผ์๋ ์ ๋์ํ๋ค ์ด๋ C ํ์
์ ์ถ์ํ ์์ผ์ ๊ธฐ๊ธฐ๊ฐ ํน์ ์ถฉ์ ๊ธฐ์ ์์กดํ๋๊ฒ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์์กด์ฑ์ ์ญ์ ์์ผฐ๋ค.
๐คฉ3. ํด๋ฆฐ ์ํคํ
์ณ
- ๋ก๋ฒํธ C ๋งํด์ ์ํด ๋ง๋ค์ด์ง ์ฒ ํ์ผ๋ก ์ํํธ์จ์ด์ ๊ด์ฌ์ฌ๋ฅผ ๊ณ์ธต๋ณ๋ก ๋ถ๋ฆฌํ๋ ์ํํธ์จ์ด ๋์์ธ ์ฒ ํ์ด๋ค.
- Entities โ Usecases โ Presenters โUI
- ์ฝ๋ ์ข
์์ฑ์ด ์ธ๋ถ๋ก๋ถํฐ ๋ด๋ถ๋ก ์์กดํ๋ค.
- ๋ด๋ถ ๊ณ์ธต์ ์ฝ๋๋ ์ธ๋ถ ๊ณ์ธต์ ๊ธฐ๋ฅ์ ์์ ์๋ค
- ์ธ๋ถ ๊ณ์ธต์ ์กด์ฌํ๋ ๋ณ์, ํจ์๋ฐ ํด๋์ค๋ ์์ชฝ ๊ณ์ธต์์ ๋ค์ ๋ฑ์ฅํ ์ ์๋ค
- ํด๋ฆฐ ์ํคํ
์ณ๋ฅผ ์ฌ์ฉํ์๋ ์ฅ์
- ๊ณ์ธต์ ๋ถ๋ฆฌํ๊ณ ๊ณ์ธต๊ฐ์ ์์กด์ฑ์ ๋จ๋ฐฉํฅ์ผ๋ก ๋ง๋ค๊ธฐ๋๋ฌธ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฉ์ดํด์ง๋ค.
- ์ ๋ ํ
์คํธ๊ฐ ์ฌ์์ง๋ค.
1) Entities
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด์ด๋ค.
- ๋คํธ์ํฌ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ํด๋์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ๋งํ๋ค
2) Use Cases
- ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ด๋ จ๋ ๋น์ฆ๋์ค ๊ท์น์ ํฌํจํ๊ณ ์์คํ
์ ๋ชจ๋ ์ ์ค์ผ์ด์ค ๊ตฌํ์ฒด๋ค์ ์บก์ํ ํ๋ค.
- ์ํฐํฐ๋ก๋ถํฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ๋ฉฐ ์ ์ค ์ผ์ด์ค์ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ธํ
ํฐ์ ๋๊ณ ์ ์ฌ์ ์ธ ๋น์ฆ๋์ค ๊ท์น์ ์ฌ์ฉ์ ๊ฐ๋ฅด์น๋ค.
- ์๋๋ก์ด๋์์๋ Model, Repository ,Executor๋ฑ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด ์ด ๊ณ์ธต์ ์ํ๋ค
2-1)Model
-๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ง์๋ ๋คํธ์ํฌ์ ์์ฒญ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ค.
2-2) Repository
-๋ด๋ถ DB์ ์ ๊ทผํ๊ฑฐ๋ ์ ์ฅ ๋๋ ์๊ฒฉ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ญํ ์ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ธ๋ถ ๊ณ์ธต๊ณผ์ ์ฐ๊ฒฐ์ ๋์จํ๊ฒ ํ๋ค
2-3) Executor
-Repository ๋ Model๊ณผ ๊ด๋ จ๋ ์์
์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์
์ ์ํ ํ ์ ์๋๋ก ์์
์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๊ณตํ๋ค.
3) Interface Adapters
- Use Cases , Entities๋ก๋ถํฐ ์ป๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๊ณ์ธต์ด๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ ์ป์ด UI์ ํํํ๋ ค๊ณ ์ ๋นํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด ํํ ๋งํ๋ Presenter,View, ViewModel, Controller ์ ๊ฐ์ ๊ด์ฌ์ฌ๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค.
- ์ด ๊ณ์ธต์ ๋ชฉ์ ์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ ์ ์ํฌ ์ฝ๋๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ค
4) Frameworks ์ Drivers
- ๊ฐ์ฅ ๋ฐ๊นฅ ๊ณ์ธต์ผ๋ก ์๋๋ก์ด๋์์๋ UI ์ ๊ด๋ จ๋ ์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ ,์ธํ
ํธ ์ ๋ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ฝํ
์ธ ํ๋ก๋ฐ์ด๋๊ฐ ํฌํจ๋๋ฉฐ Retrofit๊ณผ ๊ฐ์ ๋คํธ์ํฌ์ ๊ด๋ จ๋ ํ๋ ์์ํฌ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค.
๐4. ์๋๋ก์ด๋์ ํน์ง
- ์กํฐ๋นํฐ, ์๋น์ค ,๋ธ๋ก๋ ์บ์คํธ ๋ฆฌ์๋ฒ, ์ปจํ
์ธ ํ๋ก๋ฐ์ด๋ 4๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค
- ์ง์
์ ์ด ๋ค์ํ๋ค
- ์๋๋ก์ด๋ ์ปดํฌ๋ํธ๋ ์ธ์ ๋ ์ง ์คํ์ด ๊ฐ๋ฅํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ๊ณผ ๊ฐ์ ์์คํ
์กฐ๊ฑด์ผ๋ก ์ธํด ์๋์น ์๊ฒ ์ข
๋ฃ ๋ ์ ์๋ค. ์ด๋ฌํ ์๋ช
์ฃผ๊ธฐ๋ ์๋๋ก์ด๋ ์์คํ
์ด ์ ์ดํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ฐ ์ํ์ ๋ํ ๋ด์ฉ์ ์ปดํฌ๋ํธ์ ์ ์ฅํ๋๊ฒ์ ์ํํ๋ค.
๐ฆฎ5. ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ ์์น
- ๊ฐ์ฅ ์ค์ํ ์์น์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ค
- ๊ด์ฌ์ฌ๋ถ๋ฆฌ๋?
- ํด๋์ค ๊ฐ์ ๊ฐํ ์์กด์ฑ์ ๋์จํ๊ฒ ํ๋ฉด์ ๋ชจ๋ํ ์ํจ๋ค
- ๋ชจ๋ํ : ๋ค๋ฅธ ๋ชจ๋๋ก๋ถํฐ ๋
๋ฆฝ์ ์ด๋ฉฐ ์์ญ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ญํ ์ ํ๋ค๋ ์๋ฏธ
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ = ์ถ์ํ
๐คฏ6. ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ ํจํด
- MVC ,MVP, MVVM ๋์์ธ ํจํด

๐ฆฆ7. ๋์์ธ ํจํด
๐7-1.MVC ๋์์ธ ํจํด
- Model
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์์ญ์ผ๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ entity๋ฅผ ๋ด๋นํ๋ ํด๋์ค๋ฅผ ํฌํจํ sqlite,room,realm๋ฑ์ด ๋ ์ ์๋ค.
- View
- ์ฌ์ฉ์์๊ฒ ํํ๋๋ ์์ญ
- Activity,Fragment๊ฐ ๋ทฐ์ ์ญํ
- Controller
- Model , View์ ์์กดํ๋ค
- ๋ทฐ๋ก๋ถํฐ ์
๋ ฅ์ ๋ฐ๊ฑฐ๋ ์ด๋ฒคํธ ๋ฐ์ํ ๋ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
- Activity ์ Fragment๋ ๋ทฐ์ ์ญํ ์ ํจ๊ณผ ๋์์ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ค.
- MVC ๋์์ธ ํจํด์ ์ฅ๋จ์
- ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ง๊ด์ ์ด๋ค
- ์กํฐ๋นํฐ ํ๋๊ทธ๋จผํธ๊ฐ ๋ทฐ์ ์ญํ ๊ณผ ๋์์ ์ปจํธ๋กค๋ฌ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ ์ง์ ์ผ๋ก ํด๋์ค์ ์คํ๊ฒํฐ ์ฝ๋๊ฐ ๋์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ ์ง๋ค๋ ๋จ์ ์ด ์๋ค
- ์ปจํธ๋กค๋ฌ๋ ๋ทฐ์ ๋ชจ๋ธ์ ์์กด์ ์ด๊ณ ๋ทฐ๋ ๋ชจ๋ธ์ ์์กด์ ์ด๊ธฐ์ ์ ๋ ํ
์คํธ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
๐7-2.MVP ๋์์ธ ํจํด
- ๊ธฐ์กด์ MVC ํจํด์์ Controller์ View์ Model๊ณผ์ ์์กด์ฑ์ ์์ ๊ธฐ ์ํด presenter ๋ผ๋ ๊ฐ๋
์ ๋์
ํด ์ ๋ํ
์คํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ค
- Contractํด๋์ค์ View์ Presenter๋ฅผ ์ ์ํด ์ฌ์ฉ๋๋ค.
- View์ ์ญํ : View ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ ํ๋ฉฐ Presenter์ ์๋ช
์ฃผ๊ธฐ ๋๋ ํด๋ฆญ์ด๋ฒคํธ์ ๋ํ ๋ด์ฉ์ ํต์งํ๋ค.
- MVP ํจํด์ ์ฅ๋จ์
1) ์ฅ์ -View์ Model๊ฐ์ ์์กด์ฑ์ด ์์ผ๋ฉฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ui๋ฅผ ๋ถ๋ฆฌํด ์ ๋ ํ
์คํธ๊ฐ ์์ํด ์ง๋ค.
2) ๋จ์
-view ์ Presenter ๊ฐ์ ์์กด์ฑ์ด ๋์ด์ง๊ณ 1:1 ๊ด๊ณ๋ฅผ ์ ์งํ๊ธฐ์
Presenter๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ด view๊ฐ ๋์ด๋ ๋๋ง๋ค presenter๋ ๊ฐ์ด ๋์ด๋ ํด๋์ค๊ฐ ๋ง์์ง๊ฒ ๋๋ค.
๐7-3. MVVM ๋์์ธ ํจํด
- ๊ธฐ์กด์ MVP ํจํด์ View์ Presenter ๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ์ํด LiveDate, RxJava ์ ๊ฐ์Obserable ํ์
์ ์ด์ฉํด Presenter ์ View ์ฌ์ด์์ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์๋ ์ ์ ๋๋๋ฐ ์ง์คํ๋ค.
- Presenter ๋์ ์ ViewModel์ ์ด์ฉํ๋ฉฐ ViewModel์ View์ ํํํ ๋ฐ์ดํฐ๋ฅผ Obserable ํ์
์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ View ๋ค์ด ViewModel์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋
์์ฒญํ์ฌ ํ๋ฉด์ ๋ํ๋ด๋๊ฒ์ด ํต์ฌ์ด๋ค.
- View Viewmodel ๊ฐ์ ๋์จํ ์ฐ๊ฒฐ์ด ๋๋๋ก DataBinding ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
!!! ์ฒซ ๋๊ธ