본문 바로가기
카테고리 없음

[Android] Module 생성 및 추가

by Youngs_ 2024. 2. 22.

 

Kotlin을 연습하면서 Java도 함께 코딩을 하고 싶은데, 프로젝트를 새로 생성하자니 귀찮고, 하나의 프로젝트 안에 Kotlin 모듈과 Java 모듈을 생성하면 되겠다고 생각이 들었다.

Module을 생성하는 방법은 구글링해보면 이미 많이 포스팅되어 있지만, 내 목적은 단 하나! 깔끔하게 Kotlin 모듈과 Java 모듈 2개를 생성하는 것...

먼저 새로운 모듈 생성을 한다.

기존에 Kotlin 모듈도 새로 생성한 Java 모듈과 구분될 수 있게 이름을 변경한다.

각각 Run module 확인 및 설정을 한다.

이제 각각 실행해보면 ?

 


모듈이란?

 

모듈은 안드로이드 디벨로퍼 사이트에 다음과 같이 정의 되어있습니다.

모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그할 수 있습니다.

위의 설명처럼 모듈은 각각 소스 파일과 빌드 설정으로 구성된 모음입니다.
조금 더 직관적으로 설명을 하자면 아래와 같이 안드로이드 스튜디오에서 가장 먼저 프로젝트를 생성할 때 보이는 app이라는 것이 하나의 모듈이라고 할 수 있겠습니다.

 


Module? Library? Java Library?

새로운 모듈의 생성은 File - New - New Module과 같은 과정으로 이루어 집니다.
위의 과정을 진행하게 되면 다음과 같은 화면을 보실 수 있습니다.

위의 화면을 보면 대부분 Moduel 또는 Library로 나와있는 것을 볼수 있습니다.

그럼 Module과 Library, Java Library의 차이점은 뭘까요?

Module은 전체의 어플리케이션 없이 부분적으로 디버깅 할수 있고 테스트 할 수 있는 작은 부분이라고 할 수 있습니다.
반면, Library는 어플리케이션의 기능 확장을 위해 이전에 컴파일 된 소스 코드들의 집합입니다.
마지막으로 이전의 Module과 Library는 모두 Resource파일과 Class파일 등이 혼합된 모듈이라면
Java Library는 순수하게 Java파일로만 이루어진 라이브러리 입니다.

Module은 빌드 결과 APK라는 파일을 생성하게 되고, Library는 빌드 결과 AAR이라는 파일을 그리고 Java Library는 JAR 파일을 생성하게 됩니다.

 


Module, Why?

그럼 왜 모듈에 대해 알아봐야 할까요? 모듈화 할 필요 없이 모듈에 모두 넣어 놓아서 개발하면 안되는 걸까요?
물론, 간단하고 앱의 사이즈가 작은 프로젝트의 경우에는 꼭 필요하지 않을것일 수 도 있습니다.
하지만 일반적으로 상용되는 서비스라면 어떨까요? 상용되는 서비스의 경우 많은 양의 코드가 발생되고 복잡한구조를 가지고 있겠죠.
이와 같이 코드 양이 방대해지게 되면 크게 두가지 문제점이 생기게 됩니다.

  1. 코드의 재사용성
  2. 빌드 시간

먼저 '코드의 재사용성' 측면에서 보도록 하겠습니다.
예를 들어서 제가 이전에 만든 CustomView를 모듈 A와 모듈B에 추가한다고 생각해봅시다.
프로젝트에 추가 할 때, 만든 CustomView Class 파일을 그대로 Copy & Paste 하여 붙여서 사용할 겁니다.

위와 같은 구조는 당장에는 문제가 없어보일겁니다.
하지만, 만약 Module A가 동작하는 동안에 Module A에서 사용하고 있는 CustemView에 오류가 생긴다면 어떨까요?
우리는 CustomView를 그저 복사 붙여 넣기 하여 사용한 것이기 때문에 Module A에서 사용하는 CustomView의 오류를 해결해야 할 뿐더러 Module B에서 사용하는 CustomView 클래스 마저도 각각 수정을 해줄 수 밖에 없습니다.

바로 이러한 이유로 코드의 재사용성을 높이기 위해 코드를 모듈화 하여 종속시키는 작업이 필요합니다.

다음과 같이 Library로서 모듈화를 하여 각각 Module A 와 Module B에 종속시킴으로서 하나의 라이브러리로서
Module A와 Module B에 나눠서 작업하지 않아도 된다는 장점이 있습니다.

다음은 '빌드 시간'의 측면에서 살펴보도록 하겠습니다.
개발자에게 빌드 시간은 아주 중요한 요소라고 할 수 있습니다.
빌드 시간은 단 몇초가 소요될 수 도 있고, 몇 분까지도 소요될 수 있는 작업입니다. 가만히 앉아 컴퓨터가 빌드를 끝나기 만을 바라는 개발자의 낭비 되는 시간을 단축하기 위해서라도 모듈화는 꼭 필요한 작업이라고 할 수 있습니다.

이러한 모듈화 작업이 실제로 얼마나 빌드 시간을 단축 시키는지에 대해 몇가지 자료들을 가져와 봤습니다.

 

출처: https://medium.freecodecamp.org/how-modularisation-affects-build-time-of-an-android-application-43a984ce9968

위의 결과는 모두 같은 양의 코드를 바탕으로 빌드 시간을 측정한 내용입니다.
먼저, 모듈 1개에 모두 몰아 넣었을 때, 변경이 앱에서만 이루어진 경우, 빌드 시간 1분 10초로 측정이 됩니다.
하지만 모듈을 3개, 5개로 나누어 각각을 모듈화 하였을 때, 변경이 앱에서만 이루어진 경우에는 각각 36초, 24초가 소요되는 것을 볼 수 있습니다. 하지만 여기서 문제가 하나가 생기게 됩니다.
바로 라이브러리를 변경했을 때 나타나는 경우인데요. 라이브러리를 변경했을 시에는 하나의 모듈로만 이뤄졌을 때에 비해 오히려 빌드 시간이 늘어난 것을 볼 수 있습니다. 이것에 대해 설명을 하기 위해 아래의 그림을 통해 간단히 설명하도록 하겠습니다.

 

위와 같은 상황이 일어나는 이유는 다음과 같습니다.
라이브러리가 변경되어 빌드시에는 debug빌드를 하더라도 라이브러리는 debug/release 두가지를 빌드 하게 됩니다. 이와 같은 이유로 인해 기존의 1개 모듈일 때 보다 빌드 시간이 더 걸리는 것을 볼 수 있습니다. 하지만 각각을 모듈화 하면 할 수록 라이브러리가 변경이 되어도 시간이 단축되는 것을 볼 수 있습니다.

이처럼 코드를 모듈화 하는 작업을 통해서 다음과 같은 장점을 가져갈 수 있습니다.

  • 코드 재사용성
  • 유닛테스트 용이
  • 모듈 단위 코드 수정 용이
  • 빌드 속도 감소
  • 의존성 낮은 코드 작성

출처 1 : https://knoow.tistory.com/201

 

Android Studio 1개의 Project에 N개의 Module 생성 방법

Kotlin을 연습하면서 Java도 함께 코딩을 하고 싶은데, 프로젝트를 새로 생성하자니 귀찮고, 하나의 프로젝트 안에 Kotlin 모듈과 Java 모듈을 생성하면 되겠다고 생각이 들었다. Module을 생성하는 방

knoow.tistory.com

출처 2 : https://footcode.postype.com/post/3673100

 

Android Multi Module : 포스타입 포스트

오늘은 새롭게 공부한 Module에 대해서 포스팅 하려고 합니다. Definition 모듈은 안드로이드 디벨로퍼 사이트에 다음과 같이 정의 되어있습니다. 모듈은 소스 파일 및 빌드 설정으로 구성된 모음이

footcode.postype.com

 

댓글