본문 바로가기
오늘은 뭘 배울까?/Android

안드로이드 Clean Architecture

by Kim Juhwan 2021. 3. 7.

0. 시작하며...
1. 모바일 앱 사용자 환경의 기본 개념
2. 그렇다면 어떻게 설계해야 할까?
3. 구글이 권장하는 아키텍처

 

 


 

0. 시작하며...

구조적으로 잘 구성된 앱을 만들려면 어떻게 해야 할까?

어떻게 해야 유지, 보수를 쉽게 할 수 있을까?

구글이 이에 대한 해답을 정리하여 공식문서에 정리해두었다.

그리고 이것을 Clean Architecture라 부른다. 깔끔하게 잘 만들어진 설계도쯤으로 해석할 수 있다.

오늘은 이 클린 아키텍처를 공부한 내용을 정리해보려 한다.

 

1. 모바일 앱 사용자 환경의 기본 개념

여러분들이 인스타그램을 사용하고 있다고 상상하며 다음 예시를 읽어보자.

  1. 남자 친구에게 사진을 공유하기 위해 사진 촬영을 눌렀다. 카메라 앱이 실행되며 사용자는 인스타그램을 나가지만 여전히 사용 환경은 끊임없이 연결된다.
  2. 오늘 영~ 컨디션이 별로라 사진빨을 안 받는 것 같다. 그래서 앨범을 클릭해서 갤러리 앱을 실행한다.
  3. 인스타그램으로 돌아와 사진을 공유한다.

이렇게 사용자가 앱을 잠시 떠나는 상황은 매우 흔한 상황이다.

만약 이 과정에서 전화가 오거나 알림이 오면 사용 환경이 중단될 수도 있다.

또, 스마트폰의 리소스는 제한되어 있으므로 운영체제가 공간이 필요하다고 판단하면 앱 프로세스를 종료하기도 한다.

잠시 앱을 떠났다고, 전화를 받고 왔다고 내가 작업하던 내용이 날아가는 걸 원하는 사용자는 아무도 없을 것이다.

 

이렇듯 사용자 혹은 운영체제가 앱 구성요소를 제거할 수 있기 때문에 우리는 앱 데이터나 상태를 앱 구성요소에 저장하면 안 되며 앱 구성요소가 서로 종속되면 안 된다. 이것이 모바일 앱 사용자 환경의 기본 개념이다.

 

 

2. 그렇다면 어떻게 설계해야 할까?

 

과거의 나 손들고 서있어

나 같은 초보 개발자가 하는 실수가 있다.

Activity랑 Fragment에 코드를 다 때려 박는 것이다. 이렇게 하면 생명 주기와 관련된 많은 문제가 발생한다.

이러한 UI 기반 클래스에는 UI 및 운영체제 상호작용을 처리하는 로직만을 포함해야 한다.

메모리 부족이라던지 등의 이유로 OS가 클래스를 제거할 수 있으므로 사용자의 원활한 앱 사용을 위해 UI 기반 클래스를 가볍게 유지하며 의존성을 최소화하는 것이 좋다.

 

그다음으로는 Model을 뷰 객체 및 앱 구성요소와 독립시키는 것이다.

Model이란 뷰에 표시될 데이터를 가지고 처리를 담당하는 구성요소를 뜻한다.

쉽게 말해 데이터와 관련된 걸 UI와 분리시키라는 말이다. 이렇게 함으로써 앱은 생명 주기와 관련된 문제를 피할 수 있다.

 

어떤 문제가 발생할 수 있는지는 생명 주기에 대해 다룬 포스팅에 언급한 적이 있다.

 

위 두 규칙으로 우리는 역할을 잘 분배하고 의존성을 낮추어야 하며 그래야 여러 문제로부터 벗어나고 유지/보수가 용이해진다는 것을 알 수 있다. 이 규칙을 지키는 아키텍처 패턴의 종류에는 MVC, MVP, MVVM이 있는데 앱 개발뿐만 아니라 여러 분야에서 쓰이는 개념이다.

 

아키텍처 패턴에 대해서는 더 공부해서 다음에 포스팅을 해봐야겠다. 오늘은 주제를 벗어나므로 패쓰

 

3. 구글이 권장하는 아키텍처

구글에서는 권장하는 아키텍처의 예시를 보여주며 모든 상황에 최적화된 아키텍처 패턴은 없으며 위 규칙을 잘 지키고 있다면 방법을 바꿀 필요는 없다고 설명하고 있다. 아래 내용은 하나의 모범 예시 정도로 보면 된다.

 

 

이 부분에 대해서는 권장 아키텍처를 실제로 사용해보고 작성할 예정이다.
구글이 설명한 내용은 이곳에서 볼 수 있다.

 

 

 


💡 알게 된 점 

  • 채용 공고에 맨날 쓰여있는 MVVM, 클린 아키텍처가 이런 뜻이었구나...
  • 공식문서를 자주 읽자. 진짜 자세히 잘 설명되어 있다.
  • 업데이트 좀 자주 하자. 안드로이드 스튜디오 구버전을 몇 년째 쓰고 있으니 이런 것도 모르지 바보야..
  • View Model, Live Data에 대해 공부하면서 난 진짜 불편하게 더럽게 앱을 만들고 있었구나를 느꼈다.

📘 참고한 자료


 

 

반응형

댓글