일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Kotlin
- 컴포즈
- UnitTest
- Observable
- 공격적 프로그래밍
- Di
- Jetpack
- compose
- mock
- 안드로이드
- 제한함수
- Android
- 코틀린
- rxjava
- 자료구조
- Room
- 깃
- 테스트의 장점
- dagger2
- 디자인패턴
- 단위테스트
- 유닛테스트
- ViewModel
- Python
- 안드로이드 디자인패턴
- 파이썬
- MVVM
- git
- 코딩테스트
- 안정성
- Today
- Total
세상을 바꾸는 개발자
[Android] 안드로이드 설계원칙 본문
안녕하세요~ 헬창코딩입니다. 오늘은 안드로이드 애플리케이션 설계 원칙에 대해서 알아보도록 하겠습니다.!
https://book.naver.com/bookdb/book_detail.nhn?bid=16327417 책 를 참고했습니다!!
제가 처음 안드로이드를 개발을 할 때는 경험이 부족해서 디자인 패턴이나 앱 구조를 신경 쓰지 못하고 개발을 했습니다.
액티비티나 프레그먼트 같은 UI 컴포넌트에 거의 코드를 작성했죠 ㅠㅠ 그래서
스파게티 코드가 되고 코드량도 너무 많아지고 코드에 대한 가독성도 떨어질뿐더러 안드로이드에서 발생하는 다양한 예외사항을 처리하기 힘든 상태도 많이 경험을 했습니다.
그래서 이 책에서도 말하듯이 액티비티와 프래그먼트의 클래스의 의존성을 최소한으로 하는 것이 좋다고 합니다.!!
따라서 가장 중요한 것은 관심사 분리!!! -> 애플리케이션을 구별된 부분으로 분리하는 디자인 원칙으로 각 부분은 개개의 관심사를 해결합니다. 여기서 관심사란 어떠한 상태나 데이터의 영향을 미치는 정보의 집합입니다.
결국 관심사 분리란 클래스 간의 강한 의존성을 느슨하게 하면서 모듈화 시킵니다.
여기서 모듈이라는 것은 다른 모듈로부터 독립적이면 영역에 따라 다른 역할을 한다는 의미입니다.
이렇게 관심사 분리를 통해 모듈화를 성공적으로 마치면
1. 애플리케이션의 설계, 배포, 유닛 테스트와 같은 일부의 관점에서 더 높은 자유도가 생김
2. 코드도 단 순환되고 유지보수 측면에서 더 적은 비용이 들어감
3. 독립적인 개발과 재사용성 증대
4. 생산성 향상
자! 그럼 권장하는 애플리케이션 설계는 무엇일까요??
구글에서는 다음과 같은 관심사 분리를 통해 애플리케이션을 설계하는 것을 권장한다고 합니다.
1. 액티비티 또는 프래그먼트는 단지 ViewModel만을 참조합니다.
-> ViewModel만 참조하여 ViewModel에서 하위 계층의 의존성이 어떻게 변경되는 Activity나 Fragment는 관심이 없습니다.
2. ViewModel은 Repository라는 저장소를 참조하고 이 저장소로부터 UI 컴포넌트가 화면을 구성하는 데 필요한 데이터를 불러옵니다.
-> 데이터를 불러와서 LiveData라는 데이터의 변화를 감지할 수 있는 형태로 관리합니다.
3. 저장소는 2가지 타입의 모델을 참조합니다.
-> 첫 번째는 네트워크 연결이 필요 없는 내부 모델(Sqlite, Room 등)
-> 두 번째는 서버에서 데이터를 불러오는 원격 모델(Retrofit, volly 등)
4. ViewModel은 내부 데이터베이스만을 항상 참조하고, 클라이언트의 데이터베이스와 서버의 데이터베이스가 요청으로 비동기적으로 동기화합니다.
-> 전파 수신 약전계에서도 애플리케이션은 원활히 동작할 수 있고, 네트워크 상황이 좋아지면 다시 최신의 데이터로 UI 컴포넌트를 갱신할 수 있습니다.
그림) 구글에서 권장하는 구조
참조 https://developer.android.com/topic/libraries/architecture
다음에는 본격적으로 디자인패턴을 알아보도록 하겠습니다!!!!
'안드로이드 > Design Pattern' 카테고리의 다른 글
Delegate Pattern - kotlin (by를 사용해서 쉽게) (1) | 2022.03.05 |
---|---|
[Android] 안드로이드 디자인패턴 3 - 3 MVVM패턴 (0) | 2021.07.12 |
[Android] 안드로이드 디자인패턴 3 - 2 MVP패턴 (0) | 2021.07.12 |
[Android] 안드로이드 디자인패턴 3 - 1 MVC패턴 (0) | 2021.07.09 |
[Android] 애플리케이션 앱설계와 원칙은? (0) | 2021.07.06 |