[안드로이드 클린 아키텍처 시리즈] Data Layer 구현 1편 #6

2024. 2. 10. 11:30·안드로이드/클린 아키텍처
반응형

1. 안드로이드 클린 아키텍처 Data Layer 1편

안녕하세요, 이번 포스팅에서는 Domain Layer에 이어 Data Layer를 살펴보며 클린 아키텍처의 또 다른 핵심 구성 요소인 Data Layer에 대해 설명하고 구현하겠습니다.

Data Layer는 애플리케이션의 데이터 소스와의 상호작용을 관리하는 계층으로, 데이터의 저장, 검색, 업데이트, 삭제 등의 작업을 수행합니다.

이 계층의 목적은 애플리케이션의 나머지 부분, 특히 비즈니스 로직을 담당하는 Domain Layer와 사용자 인터페이스를 담당하는 UI Layer 사이에서 데이터를 중개하는 것입니다.

Data Layer 폴더 구조
Data Layer에 api, dto, data soruce, repository를 구현한 모습

2. Data Layer의 의존성 추가, Data Model, Api Interface 구현

Data Layer에서는 데이터 소스(Data Source), 레포지토리(Repository), 데이터 모델(Data Transfer Object, DTO), 데이터 액세스 객체(Data Access Object, DAO)를 구현하게 됩니다. 이번 시간에는 클린 아키텍처 Data Layer의 이해를 돕기 위해서 로컬 데이터베이스인 Room과 DAO 구현은 제외하고, 의존성 추가와 Data Model, Api Interface 정의를 구현하겠습니다.

2-1. Data Layer를 위한 의존성 추가

먼저, API 통신을 할 수 있도록 retrofit과 관련된 의존성을 추가합니다.
만약, Room도 사용한다면 Room과 관련된 의존성도 추가하면 됩니다.

dependencies {
	// Domain Layer에 대한 의존성
    implementation(project(":domain")) 

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
    
    ...
}

2-2. Data Model (DTO)

데이터 모델은 데이터베이스, 네트워크 요청 등에서 사용되는 데이터의 구조를 나타냅니다. 영화 데이터 모델을 다음과 같이 정의하겠습니다. MovieData에 확장함수를 구현해서 Domain Layer에서 정의한 MovieEntity로 변환하는 확장함수도 구현했습니다. Data Layer는 Domain Layer에 의존하고 있기 때문에 MovieEntity를 불러올 수 있게 됩니다.

data class MovieData(
    @SerializedName("id") val id: Int,
    @SerializedName("title") val title: String,
    @SerializedName("description") val description: String,
    @SerializedName("category") val category: String,
    @SerializedName("image") val image: String,
    @SerializedName("backgroundUrl") val backgroundUrl: String,
)

fun MovieData.toDomain() = MovieEntity(
    id = id,
    title = title,
    description = description,
    category = category,
    image = image,
    backgroundUrl = backgroundUrl,
)

2-3. Retorift을 이용해서 Movie API Interface 정의

영화 정보를 가져오기 위해서 MovieApi interface를 정의하겠습니다. 여기서는 retrofit을 사용해서 통신을 하게 됩니다. 이렇게 Data Layer는 안드로이드 라이브러리를 사용하게 됩니다. 즉, Domain Layer는 안드로이드 플랫폼에 종속적인 계층이기 때문에 모듈을 생성할 때 'Android Library'를 선택한 것입니다.

interface MovieApi {
    @GET("/movies")
    suspend fun getMovies(@Query("id") movieIds: List<Int>): List<MovieData>
    @GET("/movies/{id}")
    suspend fun getMovie(@Path("id") movieId: Int): MovieData
}

3. 안드로이드 클린 아키텍처 Data Layer 1편 정리

이번 시간에는 Data Layer의 구성요소에 대해 소개드렸고 의존성 추가, DTO 구현, Movie Api Interface까지 구현했습니다. Data Layer에서 남은 내용은 Data Source, MovieRepository 구현입니다.

Data Layer의 내용이 길어지는 것 같아서 남은 내용은 Data Layer 2편으로 넘어가겠습니다.

 

저작자표시 비영리 변경금지 (새창열림)

'안드로이드 > 클린 아키텍처' 카테고리의 다른 글

[안드로이드 클린 아키텍처 시리즈] UI Layer 구현 1편 (with Hilt) #8  (0) 2024.02.12
[안드로이드 클린 아키텍처 시리즈] Data Layer 구현 2편 #7  (0) 2024.02.11
[안드로이드 클린 아키텍처 시리즈] Domain Layer 구현 #5  (0) 2024.02.09
[안드로이드 클린 아키텍처 시리즈] 프로젝트 구조 설정 #4  (0) 2024.02.08
[안드로이드 클린 아키텍처 시리즈] Domain Layer 설명 및 이론정리 #3  (0) 2024.02.07
'안드로이드/클린 아키텍처' 카테고리의 다른 글
  • [안드로이드 클린 아키텍처 시리즈] UI Layer 구현 1편 (with Hilt) #8
  • [안드로이드 클린 아키텍처 시리즈] Data Layer 구현 2편 #7
  • [안드로이드 클린 아키텍처 시리즈] Domain Layer 구현 #5
  • [안드로이드 클린 아키텍처 시리즈] 프로젝트 구조 설정 #4
코딩덕
코딩덕
안드로이드, 리액트 등의 개발 노하우와 최신 AI 기술을 다루는 기술 블로그입니다. 실무 중심의 경험을 바탕으로 마주한 문제와 해결 과정을 체계적으로 기록하며, 개발자에게 실질적으로 도움 되는 프로그래밍 팁과 인사이트를 쉽고 명확하게 공유하고자 합니다.
  • 코딩덕
    개발자가 들려주는 IT 이야기
    코딩덕
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 안드로이드 (62)
        • 멀티 모듈 (11)
        • 클린 아키텍처 (11)
        • 트러블 슈팅 (5)
        • 코틀린 (3)
        • 코루틴 (2)
        • Compose (1)
        • Compose UI (6)
        • Compose Dialog (8)
        • Compose Paging3 (11)
        • Compose State (2)
        • Util (1)
      • Github (3)
        • PR Template (2)
        • AI Code Review (1)
      • 리액트 (1)
        • NextJs (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    multi module
    recyclerview
    Dialog
    MutableState
    flow
    OnBackPressedDispatcher
    트러블슈팅
    LazyRow
    enum class
    Jetpack Compose
    Github
    sealed class
    dynamic json
    멀티 모듈
    jsonadapter
    ViewModel
    클린 아키텍처
    ai code review
    데이터 레이어
    코루틴
    UI Layer
    ScrollView
    pr template
    코틀린
    Gradle
    Clean Architecture
    Usecase
    안드로이드
    pager
    paging3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩덕
[안드로이드 클린 아키텍처 시리즈] Data Layer 구현 1편 #6
상단으로

티스토리툴바