Groo
Android Studio 레이어 분리 방법에 대해서 본문
안녕하세요, 오늘은 이전에 배운 클린 아키텍처를 바탕으로 실제로 안드로이드 스튜디오에서 앱 개발을 할 수 있도록
개발 환경을 구성해보겠습니다. 오늘 배운 내용은 앞으로도 많이 사용되고 유용하기 때문에 많은 도움이 될 것입니다.
🧶 클린 아키텍처를 위한 개발 환경?
안드로이스 스튜디오에서 클린 아키텍처를 바탕으로 앱 개발을 하기 위해서는 기본적으로 설정되어있던 세팅들을 수정해야 할 필요가 있습니다. 그 이유는 간단합니다. 클린 아키텍처에서는 presentation, data, domain과 같이 3개의 레이어가 각각 존재하며 각 레이어에서 맡은 역할이 나뉘어있다면 반면에 기존의 설정에서는 app 레이어 한 개만이 존재할 뿐 다른 설정은 되어있지 않습니다.
즉 결론적으로 클린 아키텍처를 활용하여 앱 개발을 하고 싶다면 기존의 환경에서 3개의 레이어를 추가, 각 레이어의 결합 및 각종 설정들을 해주어야 합니다. 만약 클린 아키텍처에 대한 설명이 필요하다고 생각한다면 이전에 작성한 아래의 글을 참고 부탁드립니다.
📷 영상을 통한 설명
원래는 아래의 글들을 통해서만 이번 방법에 대해 소개하려 했으나 영상이 있다면 조금 더 이해하기가 쉬울 것이라는 생각이 들어 급하게 영상을 촬영하게 되었습니다. 이렇게 영상을 촬영하는 것은 처음이다보니 아직 부족하고 많이 어설프지만 양해 부탁드립니다.
📚 글을 통한 설명
지금부터 본격적으로 개발 환경 세팅을 진행하겠습니다. 이번 글의 테스트를 담당하는 새로운 프로젝트 파일을 가장 먼저 생성해보도록 하겠습니다. 프로젝트 파일의 이름은 SampleLayer로 지정하겠습니다. Language와 프로젝트 이름은 자유롭게 하셔도됩니다.
1. 프로젝트 파일 생성
앞에서도 말했듯이 프로젝트의 이름과 언어는 이번 과정에서 무관하며 독자가 원하는대로 자유롭게 설정하셔도 문제가 없습니다.
2. 최상위 디렉토리 변경 (Project)
프로젝트 빌드가 모두 종료되었다면, 아래의 사진과 같이 최상위 디렉토리를 다양한 요소들 중 Project를 선택하여 변경합니다.
3. data, domain 레이어 생성
그 후 프로젝트 파일인 SampleLayer 폴더를 우클릭하여 New -> Module 이와 같이 클릭합니다. 그러면 모듈의 타입를 선택할 수 있는 특정 화면이 표시될 것이며 그 중 저희는 가장 아래쪽에 위치한 Java or Kotlin Library를 선택하도록 하겠습니다. 이를 선택한다면 새로운 모듈의 이름을 지정할 수 있는 화면이 표시되며 저희는 먼저 data라는 이름을 가진 모듈 즉 레이어를 생성하겠습니다.
여기서 모듈의 이름을 제외한 다른 것들은 수정할 필요가 없으며 최종적으로 finish 버튼을 누른다면 새로운 빌드와 함께 data 레이어가 생성됩니다. 그러나 현재는 변화가 없을 것입니다. 이와 같은 방식으로 domain 레이어도 동일하게 생성해주시기 바랍니다.
4. app 레이어 이름 변경
하지만 클린 아키텍처에서는 presentation, data, domain 레이어를 필요로하지만 현재 프로젝트 파일에서는 presentation 레이어는 존재하지 않고 app 레이어가 대신 존재하는 것을 알 수 있습니다. app 레이어는 프로젝트 파일에 기본적으로 세팅되는 레이어입니다. 그래서 저희는 이 app 레이어의 이름을 presentation으로 변경하여 이 레이어를 삭제하지 않고 재사용할 수 있습니다.
app 레이어 위에 우클릭을 하여 Refactor -> Rename 이와 같이 클릭합니다. 그러면 directory 또는 module 중 어떤 곳의 이름을 바꿀 것인지 질문이 나올 것이며 저희는 그 중 module을 선택합니다. 그 후 app 레이어의 새로운 이름을 presentation으로 지정하고 확인 버튼을 누른다면 새로운 빌드와 함께 기존의 app 레이어의 이름이 presentatation으로 변경된 것을 바로 볼 수 있습니다.
5. AndroidManifest 파일 복사
presentation 레이어로 이름을 변경하였다면 이 레이어에서만 단독적으로 존재하는 AndroidManifest 파일을 data, domain 레이어에 각각 복사해주도록 하겠습니다. 방법은 어렵지 않습니다. 파일을 복사하여 각 레이어의 알맞은 위치에 복사해주면 됩니다.
6. AndroidManifest 파일 수정
data, domain 레이어에 각각 AndroidManifest 파일을 복사하였다면 아래의 사진과 같이 빨간 글씨로 오류가 표시될 것입니다. 그러면 먼저 첫 번째 줄에 존재하는 xml 태그를 지워주고 manifest 태그 안에 위치한 application 태그도 모두 지워주시기 바랍니다.
그리고 manifest 태그 안에 위치한 package 속성 값을 com.example.samplelayer -> com.example.data로 변경해주시기 바랍니다. 이 과정에서 com.example 이라는 것은 패키지의 주소를 의미하며 이는 독자들의 프로젝트에서는 다르게 설정되어 있을 수 있습니다. 그렇기 때문에 당황하지 마시고 맨 뒷 자리만 data 레이어면 data, domain 레이어면 domain 으로 설정 부탁드립니다.
7. 최상위 디렉토리 변경 (Android)
6번을 따라서 data, domain 레이어의 AndroidManifest 파일을 정상적으로 수정하였다면 이번에는 이전에 변경한 최상위 디렉토리를 다시 Andoid로 변경하도록 하겠습니다. 그러면 왼쪽에 존재하던 파일들이 이전보다 조금 더 깔끔해진 것을 볼 수 있습니다.
8. Gradle 파일 내용 복사 (data)
이번에는 위에서 AndroidManifest 파일을 복사하였던 것과 같은 형태로 presentation 레이어의 Gradle 파일 내용을 data 레이어의 Gradle 파일에 모두 복사 붙여넣기 하겠습니다. domain 레이어의 Gradle 파일에는 아직 아무 설정도 하지마시기 바랍니다.
9. Gradle 파일 내용 수정
복사된 data 레이어의 Gradle 파일을 수정해보도록 하겠습니다. 제일 상단에 위치한 apply plugin: 'com.android.application' 코드를 'com.android.library' 형태로 수정해주시기 바랍니다. 그 후 android 코드 내부에 위치하는 defaultConfig 코드 아래에 존재하는 applicationId 속성 값을 지워주고 바로 그 아래에 위치하는 buildTypes 코드 전체를 모두 삭제해주시기 바랍니다.
10. Gradle 파일 내용 복사 (domain)
data 레이어의 Gradle 파일 내용을 9번과 같이 모두 정상적으로 수정하였다면 이제 data 레이어의 Gradle 파일 속 코드를 모두 복사하여 domain 레이어의 Gradle 파일에 아까와 같이 복사 붙여넣기 해주시기 바랍니다. 이제 거의 다 끝나가니 힘내시기 바랍니다.
11. 의존성 관계 설정
마지막 단계로 앞에서 구현한 3개의 레이어에 대한 의존성 관계 설정을 해주도록 하겠습니다. 클린 아키텍처에서 presentation 레이어는 data, domain 레이어에게 의존성이 존재하고 data 레이어는 domain 레이어에게 의존성이 존재한다고 말하였습니다. 이 관계를 바탕으로 실제 코드를 작성하겠습니다. 먼저 presentation 레이어의 Gradle 파일 속 아래의 코드를 추가해주시기 바랍니다.
dependencies {
...
implementation project(":data")
implementation project(":domain")
}
또한 앞에서도 말했듯이 data 레이어는 domain 레이어에게 의존성이 존재하기 때문에 의존성 관계 설정을 해주어야합니다. 이번에는 data 레이어의 Gradle 파일을 열어 아래의 코드를 추가 해주시기 바랍니다. 마침내 이를 통해 모든 설정이 끝나게 되었습니다.
dependencies {
...
implementation project(":domain")
}
👍 글을 마치며
이 글을 적게된 이유는 이전에 제가 클린 아키텍처에 대해서 처음 공부할 당시 클린 아키텍처에 대한 개념은 어느정도 공부하여 실제로 클린 아키텍처에서 배운 형식대로 안드로이드 스튜디오에서 코드를 작성해보려고 했습니다. 하지만 시작부터 3개의 레이어를 분리하는 방법을 몰라 시도 자체를 하지 못하였습니다. 그래서 저는 이 방법을 배우기 위해 구글 등 다양한 문서들을 찾아보았지만 이에 대해서 자세히 설명해둔 글은 아무것도 존재하지 않았습니다. 그러나 다행이도 저는 저의 친구에게 이 방법을 배우게되었고 배운 내용을 바탕으로 글을 작성해 다른 사람들에게 공유한다면 저를 포함한 많은 사람들이 도움이 될 것 같아 이렇게 글을 작성하게 되었습니다. 실제로는 이런 방식 말고도 다른 간단한 방식이 존재할 수 도 있습니다. 하지만 저는 친구에게 배운 내용을 정리하여 작성하였고 혹시나 더 간단한 방법이나 또 다른 방법이 존재하는 것을 알고 계시다면 댓글을 통해서 알려주시면 정말 감사하겠습니다.
'Android' 카테고리의 다른 글
Jetpack Compose 개요 (4) | 2021.06.30 |
---|---|
Room 데이터베이스 라이브러리 (5) | 2020.06.01 |
Koin 코인 라이브러리 (1) | 2020.05.07 |
ViewModel & LiveData 라이브러리 (7) | 2020.03.19 |
DataBinding 데이터 바인딩 라이브러리 (0) | 2020.02.25 |