상세 컨텐츠

본문 제목

나만의 안드로이드 앱 만들기(초보자 편) - 기초 구조 소개 (6-1)

나만의 안드로이드 앱 만들기/초급자

by Victorywskim 2023. 11. 1. 00:37

본문

반응형

이 강좌에서 사용하게 될 기술 스택은 다음과 같습니다.

- Compose

- SSA (Single Activity Architecture)

- DI (Hilt)

- MVI (Model-View-Intent)


Compose

프로젝트를 만들고나면 기본 구조는 다음과 같습니다.

MainActivity 를 열어보면 다음과 같습니다.

 

간단한 Compose 구조로 되어 있어 실행 정도 해볼 수 있는 수준입니다.

 

예전에는 안드로이드 앱을 개발할때 Activity 및 Fragment 구조로 개발을 진행하였지만, 앞으로는 Compose 구조로만 개발이 진행될 것으로 예상됩니다.

 

저 또한 기존 개발 방식을 버리고 Compose 로만 강좌를 이어갈 예정입니다.

 


SSA (Single Activity Architecture)

일반적으로 안드로이드 앱은 여러 액티비티 들로 구성되어 있습니다.

액티비티는 화면을 구성하는 단위로 아래 자료들을 참고 부탁드립니다.

 

활동 소개  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

액티비티를 사용하게 되면 생명주기 (Lifecycle)에 많은 영향을 받게 됩니다.

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

생명 주기가 필요한 상황도 여럿 있습니다.

- 액티비티가 생성되는 상황 감지

- 유저와 상호 작용이 가능한 상황 감지

- 유저와 상호 작용이 안되는 상황 감지 

- 액티비티가 제거되는 상황 감지

 

위 상황들 마다 처리해야되는 작업들이 있을 것 입니다.

 

예를 들어 유저가 카카오톡 채팅방에서 보내다가 화면을 끄거나 스마트폰의 홈 화면으로 이동한다면 1이 지워지지 않게 한다던지, 최근 접속 시간을 갱신한다던지 등이 있을 것 입니다.

 

여러모로 유용하게 쓸수있는 반면에, 명확하게 이 생명 주기들을 관리하지 못한다면 NPE(nullpointerexception) 을 시작으로 수많은 에러로 고통을 받게 됩니다.

 

기존 SSA 는 하나의 액티비티에 여러 프래그먼트를 사용하여 개발하는 아키텍쳐였습니다.

 

 

프래그먼트  |  Android 개발자  |  Android Developers

프래그먼트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Fragment는 앱 UI의 재사용 가능한 부분을 나타냅니다. 프래그먼트는 자체 레이아웃을 정의 및 관리

developer.android.com

물론 메모리 관리와 같은 부분에서는 유리한 부분도 많았지만,  프래그먼트 또한 액티비티와 상당 부분 유사한 생명주기를 갖고 있기 때문에 여러 액티비티를 사용했을때와 체감상 큰 이득을 보기는 어려웠습니다.

 

Compose 는 선언형 UI 프레임워크로 SSA 에 정말 적합하다고 생각합니다.

 

생명주기에 있어서 많은 자유로움을 얻을 수 있고 편리한 SSA 적용 방법도 소개해드릴 예정입니다.

 


DI (Hilt)

DI(Dependency Injection) 는 소스코드 의존성을 자동 주입하게 해주는 것을 의미합니다.

 

DI 는 한번도 안써본 사람은 있어도 한번만 써본 사람은 없을 만큼 매우 강력한 라이브러리이기 때문에 반드시 사용 해보시는 것을 추천드립니다.

 

Hilt를 사용한 종속 항목 삽입  |  Android 개발자  |  Android Developers

Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Hilt는 프로젝트에서 종속 항목 수동 삽입을 실행하는 상용구를 줄이는 Android용

developer.android.com

Hilt 는 DI 를 해주는 라이브러리 중 하나이며, Koin, Dagger 과 같은 라이브러리도 있습니다.

 

제가 처음으로 접하기도 했고 현재도 사용하고 있는 Hilt 를 기반으로 강좌를 진행하려고 합니다.

 

Google에서도 Hilt 를 밀고있는 느낌이 더 많은 것도 이유 중 하나로 꼽을 수 있을 것 같습니다.


MVI (Model-View-Intent)

MVI 는 디자인 패턴 중 하나입니다.

 

디자인 패턴의 종류는 매우 다양합니다.

- MVC

- MVP

- MVVM

- MVI

 

디자인 패턴마다 특징도 다 다르고, 사용하는 언어 및 프레임워크 등에 있어서 많은 효율 차이가 존재합니다.

 

저는 현재 MVI 를 사용하고 있지만, 최근까지도 MVVM 을 사용하여 개발하고 있었습니다.

 

MVI 는 제 기억으로 작년 초 정도에 알긴 했었지만, 올해 초 들어서 Compose 와 같이 사용하게 되었습니다.

 

그리고 저의 개인적인 생각은 안드로이드에 정말 적절한 디자인 패턴이 아닌가 하는 생각이 듭니다.

 

그만큼 정말 매력적인 디자인 패턴이였고, 앞으로도 몇년동안은 계속 MVI를 애용하지 않을까 싶은 생각이 듭니다.


정리

서두에서 기술한 4가지 기술 스택은 사실 Compose 를 위한 스택이라고 봐도 무방합니다.

- Compose

- SSA (Single Activity Architecture)

- DI (Hilt)

- MVI (Model-View-Intent)

 

구글은 Compose를 지속적으로 밀고 있으며, 앞으로는 기존 XML 방식을 완전히 밀어내고 Compose 로 대체 할것이라고 보여집니다.

 

이미 발빠른 기업들은 신규 프로젝트는 Compose 로 개발을 진행하고 있고, 기존 프로젝트도 거의 다 마이그레이션 하고 있는 것으로 알고 있습니다.

 

그만큼 Compose 의 중요성을 날이 갈수록 높아지고 있고, 우리도 Compose 를 통해 시장의 흐름을 맞춰 갈 수 있게 노력해보면 좋겠습니다.

 

다음 강좌부터는 직접 코드를 작성해보면서 진행해보도록 하겠습니다.

 

 

나만의 안드로이드 앱 만들기(초보자 편) - 의존성 추가 및 패키지 구분하기 (6-2)

우선 큰 틀은 다음과 같습니다. 각각의 구조에 대해 설명해보면 다음과 같습니다. 이름 용도 common 공통적으로 사용되는 디자인 패턴이나 Compose 등을 관리합니다. core 비즈니스 로직 및 유틸 클래

victorywskim.tistory.com

감사합니다!

반응형

관련글 더보기