Android

안드로이드 전반적 개발 패턴, 구조 (feat repository)

Dean83 2023. 1. 26. 14:19

안드로이드 어플리케이션의 형태를 단순화 하여 보면, 이렇게 나눌 수 있다. 

'서버와 통신하여 결과값을 화면에 보여주는 형태'

 

좀 더 쪼개자면,
- 화면부 
- 통신부

 

가 있겠다. 

 

화면부를 좀 더 쪼개자면, 

- UI를 표현하는 부분

- 로직에 따라 UI를 제어 하는 부분 

으로 나눌 수 있겠다. 

 

통신부분을 나누자면, 

- Request, Response 형태를 담는 부분
- 실제 통신 부분

 

이 있겠다. 

 

위에서 맨 처음에 작성한 한줄짜리 문장을 다시 생각해보면, '결과값을 화면에 보여주는' 것이 중요하다.

이 말은, 화면부와 통신부가 연결이 되어야 한다는 뜻이 된다. 이를 구현하기 위해 여러 방법이 있겠다만, 

Repository 패턴을 기준으로 설명해 보려 한다. 이에 앞서 먼저 화면부를 보자. 

 

1. UI 구성

    - UI를 표현하는 부분은 2가지로 나뉘어 진다. xml을 통한 레이아웃 구현방법과, 
    - 안드로이드에서 밀고 있는 jetpack compose 를 통한 방법이다. 

1.1. xml을 통한 레이아웃
       - 전통적인 방법으로, 태그를 이용하여 레이아웃을 구성한다. 뷰들을 레이아웃에 묶어 화면 구성하는 방법이다. 
       - 장점이라면 익숙함, 그리고 구조를 한눈에 보기 좋다 정도? 
       - 단점이라면 계층구조가 될 가능성이 높아 복잡하고, 남이 구현한걸 보기 어렵다.

 

1.2. jetpack compose
       - 안드로이드에서 밀고 있는 방법으로, 코드에서 코딩을 통해 구현하는 방법이다. 
       - 장점이라면, 재사용성이 높고, 코드가 간결하다
       - 단점이라면, 아무래도 익숙하지 않고, 경우에 따라 재사용할 뷰가 많지 않을 수 있다. 한눈에 구조 파악하기 힘들다. 


2. UI 제어 부분
     - Activity 혹은 Fragment 로 이루어진 클래스 파일 그리고 ViewModel 이 있다. 
     - ViewModel이 장점이 훨 많으므로, ViewModel을 활용하자.  
     - ViewModel 에서 통신 결과값을 subscribe로 받고, livedata의 observe를 통해 Activity나 Fragment에 전달한다. 
        그리고 여기서 실제 UI에 결과값을 표시한다. 
     - 필요 로직에 따라 서버와 통신하고, 해당 결과를 UI에 표시하는 형태인 것이다. 
        -> 그리고 이를 위해 비동기, 이벤트 방식으로 처리를 함으로서 보다 간결하게, 최소화 된 오류와 함께 구현을 한다. 

3. 통신 부분
     - 크게 Model, DataSource, Repository로 구분할 수 있겠다. 

3.1. Model
       - Request, Response 형태에 맞는 data class를 구현한다. API 호출시 전달되고, 받아야 하는 항목들을 규격에 맞춰
          구현한다. 

3.2. DataSource
       - 실제 통신부 라고 보면 된다. 엄밀히 말해 통신은 보통 Retrofit을 사용하여 구현을 하고, DataSource 에선
          이를 호출하는 쪽으로 개발을 한다. 

       - SharedPreference를 이용하여 내부에 값을 저장, 가져오는 경우와 서버로 부터 통신을 하는 2가지 파트로 구성할
         수 있다

       - 반응형 모델로 구현을 하여,  subscribe 형태로 구독, ViewModel 에서 데이터를 받도록 한다. 

3.3. Repository
        - ViewModel 과 연계하는 부분이라고 보면 된다. DataSource 를 통해 내, 외부에 통신을 하고, 이를 한번 감싼것이다.
           이렇게 하여 ViewModel 측에선 내, 외부 신경쓰지 않고 Repository에 정의한 함수를 호출만 하면 된다. 

정리하자면, 
Activity 혹은 Fragment <-> ViewModel <-> Repository <-> DataSource <-> Model 인 격이다. 

 

'Android' 카테고리의 다른 글

부모뷰 영역을 넘어 자식뷰를 그리는법 Clipchildren 그리고 한계  (0) 2023.03.08
UseCase  (0) 2023.01.26
SharedPreference  (0) 2023.01.26
ViewModel 생성법 2가지  (0) 2023.01.26
ViewModel 코딩시 유의점  (0) 2023.01.26