안드로이드 앱 개발기 #26 - 클린 아키텍처 구현을 위한 모듈 구성
시작하며...
이번 프로젝트에서 클린 아키텍처를 구현하고 있습니다. 내용의 범위도 넓고 깊이도 얕지 않네요. 부분적으로는 이해하고 있지만 완전히 이해하는데에는 시간이 좀 더 필요할 거 같습니다. 제가 배우고 있는 내용들을 조금씩 정리하여 포스트로 올리고 있습니다. 이게 저 자신에게도 도움이 되고, 클린 아키텍처를 배우려는 분들에게도 도움이 되기를 바랍니다.
개발 환경
안드로이드 스튜디오 Chipmunk 버전을 전제로 합니다. 이전 버전을 쓰는 것도 문제는 없어 보이지만, 가능한 최신 버전을 사용하는 것이 좋습니다.
새 프로젝트 생성 후 기본적으로 만들어진 app 모듈
안드로이드 스튜디오에서 하나의 프로젝트는 1개 이상의 모듈로 구성되구요. 새 프로젝트를 생성하면, 기본적으로 app이라는 이름의 모듈이 만들어집니다. 하나의 모듈로부터 안드로이드 앱 또는 라이브러리 파일 등을 빌드할 수 있습니다. 모듈을 새로 만들 때, 무엇을 빌드할 것인지를 정할 수 있죠. app 모듈에서는 안드로이드 앱을 빌드할 수 있습니다.
클린 아키텍처 구현을 위한 모듈 구성
app 모듈만으로도 앱을 만들 수 있지만, 클린 아키텍처에서는 3개의 모듈을 만들 것을 전제로 합니다. 각 모듈의 역할은 다음과 같습니다.
모듈 | 역할 | 디자인 패턴 | 빌드 결과물 |
---|---|---|---|
domain | 비즈니스 관련 데이터 정의 | Repository(인터페이스 정의), UseCase | 라이브러리 |
data | 데이터 읽거나 기록. 서버 연동도 여기서 구현. | Repository(구현체 정의) | 라이브러리 |
presentation | 화면 보여주기 및 관련 로직 | ViewModel (뷰 관련 로직) | APK |
위 표가 한번에 이해하기 쉽지는 않습니다. 일단은 위 3가지 모듈을 기본적으로 정의하는 점에 주목하시구요. 각 모듈 그리고 관련 디자인 패턴에 대해서는 이후 차근차근 설명, 정리할 예정입니다.
참고 링크
지난 안드로이드 앱 개발기
- #25 - 스팀 관련 샘플 코드 만들면서 잘못한 점
- #24 - 시작 화면 구성 요소 식별하기
- #23 - 프로젝트 초기 화면 구성부터 대략적으로...
- #22 - Kotlin 코드로 JavaScript 코드를 실행할 수 있을까?
- #21 - 실습 도중 발생한 오류: A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
- #20 - 클립보드에 텍스트 복사하는 함수 만들어 보기 (Kotlin)
- #19 - 데이터 바인딩 적용했으나 UI 자동 업데이트 되지 않는 문제
- #18 - 에뮬레이터에서 토스트 안 보이는 문제 (1)
- #17 - 유닛 테스트를 실행할 수 없는 문제 해결
- #16 - 잘 되던 유닛 테스트를 실행할 수 없는 문제
- #15 - 앱 재시작 코드
- #14 - Fragment 사용시 간혹 발생할 수 있는 Fragment not attached to Activity 문제
- #13 - Retrofit2 활용 서버로부터 받을 데이터 유형 JsonElement (JSONObject 사용 불가)
- #12 - Glide 활용하여 이미지 다운로드 받는 코드
- #11 - 처리할 수 없는 예외/크래쉬 발생시 앱 재시작하기
- #10 - 안드로이드 스튜디오 업그레이드 후 단축키가 안되면? (맥북)
- #9 - LiveData 객체에 동일 데이터 설정하면 observer 실행되는지 확인 목적의 샘플 프로젝트
- #8 - 안드로이드 스튜디오에서 빌드시 발생하는 Build Tools revision 31.0.0 오류
- #7 - 'UGC(사용자 생성 콘텐츠) 정책 미준수'로 심사 거절
- #6 - 뷰에 역마진 적용 불가시 translationX, translationY 속성 사용하기
- #5 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #4 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #3 - 무한 롤링 배너 만드는 법을 찾았으나, 높이를 wrap_content로 지정이 안 먹히는 문제점이...
- #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
- #1 - 페이스북 로그인 연동시 발생했던 문제들
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.