Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- hilt
- 안드로이드스튜디오
- RecyclerView
- 의존성주입
- 스튜디오
- Gradle
- DI
- 안드로이드 스튜디오
- ADB
- coroutine
- 유튜브
- 에러
- Github
- 웹뷰
- build
- studio
- error
- Kotlin
- compose
- Retrofit
- WebView
- MVVM
- 코틀린
- DAGGER
- 코루틴
- cursor
- 안스
- 안드로이드
- 깃헙
- Android
Archives
- Today
- Total
코딩하는 일용직 노동자
안드로이드 클린 아키텍처, 쉽게 이해하기. 본문
안드로이드 개발을 하다 보면 한 번쯤 마주치는 거대한 벽, 바로 **'클린 아키텍처(Clean Architecture)'**입니다.
"도메인이 어떻고, 의존성이 어떻고..." 이론으로만 접근하면 너무 어렵게 느껴지는데요.
오늘은 이 클린 아키텍처를 우리가 흔히 가는 **'고급 레스토랑'**에 비유해서 아주 쉽게 정리해 보려 합니다.
이 글을 다 읽고 나면, 머릿속에 아키텍처의 구조가 그림처럼 그려지실 거예요!
🏛️ 클린 아키텍처란?
클린 아키텍처는 앱을 **3개의 역할(계층)**로 아주 명확하게 나누는 방법입니다. 서로의 일을 침범하지 않게 해서 수정과 관리를 편하게 만드는 것이 최종 목표죠.
자, 이제 우리 앱을 레스토랑이라고 상상해 봅시다.
1. 레스토랑으로 보는 3가지 계층
① 프레젠테이션 계층 (Presentation Layer) = 🤵♂️ 웨이터
하는 일: 손님(사용자)에게 메뉴판(화면)을 보여주고, 주문(터치 입력)을 받습니다. 요리가 완성되면 손님 식탁에 예쁘게 서빙합니다.
특징: 요리하는 법은 전혀 모릅니다. 그저 주방에 "주문 들어왔어요!"라고 소리쳐 알릴 뿐입니다.
안드로이드에서는: Activity, Fragment, ViewModel, XML/Compose
② 도메인 계층 (Domain Layer) = 👨🍳 요리사 (핵심!)
하는 일: 주문서(요청)를 보고 레시피(비즈니스 로직)대로 요리를 만듭니다. "스테이크는 미디엄으로 굽는다", "알러지 재료는 뺀다" 같은 핵심 규칙을 여기서 수행합니다.
특징: 홀에 있는 손님이 남자인지 여자인지, 주문 받은 웨이터가 누구인지 신경 쓰지 않습니다. 오직 '맛있는 요리'를 만드는 데만 집중합니다. 앱의 심장과 같은 곳입니다.
안드로이드에서는: UseCase, Model(Entity)
(참고: 이곳에는 안드로이드 관련 코드가 없고, 순수 Java/Kotlin 코드만 존재합니다.)
③ 데이터 계층 (Data Layer) = 🛒 재료 조달팀
하는 일: 요리사가 "당근 주세요" 하면 냉장고에서 꺼내오든, 마트에 가서 사 오든(서버 통신, 내부 DB) 어떻게든 재료를 구해와서 요리사에게 건네줍니다.
특징: 요리사가 이 재료로 무슨 요리를 할지는 관심 없습니다. 오직 신선한 재료를 가져오는 것에만 집중합니다.
안드로이드에서는: Repository, DataSource, Retrofit(API), Room(DB)
2. 절대 어기면 안 되는 '핵심 규칙' (의존성 규칙)
이 구조에서 가장 중요한 규칙은 **"안쪽(요리사)은 바깥쪽(웨이터, 재료팀)을 몰라야 한다"**는 것입니다.
웨이터(UI) ➡ 요리사(Domain): 웨이터는 요리사를 부를 수 있습니다. 주문을 넣어야 하니까요. (⭕)
요리사(Domain) ➡ 웨이터(UI): 요리사가 웨이터의 이름이나 오늘 입은 유니폼 색깔을 알 필요가 있을까요? 없습니다. (❌)
요리사(Domain) ➡ 재료팀(Data): 요리사는 "재료 구해줘"라고 **인터페이스(계약서)**만 던집니다. 실제 재료팀이 이마트를 가는지 홈플러스를 가는지는 모릅니다. (Data 계층이 Domain 계층을 바라보게 구현합니다.)
💡 쉽게 말해: 화면(UI) 디자인을 완전히 뜯어고쳐도, 핵심 기능인 요리법(Domain) 코드는 단 한 줄도 수정할 필요가 없어야 합니다.
3. 왜 이렇게 복잡하게 나누나요? (장점)
처음엔 파일도 많아지고 복잡해 보이지만, 앱이 커질수록 엄청난 장점을 발휘합니다.
수정이 쉽습니다 🛠️
"서버를 바꿀 건데?" 👉 데이터 계층만 수정하면 됩니다.
"화면 디자인 바꿀 건데?" 👉 프레젠테이션 계층만 바꾸면 됩니다.
테스트가 쉽습니다 ✅
화면(UI)이 아직 안 만들어졌어도, 요리사(Domain)의 요리 기능만 따로 테스트해 볼 수 있습니다.
오래가는 앱을 만듭니다 🚀
안드로이드 버전이 바뀌거나 새로운 라이브러리가 나와도, 앱의 핵심 로직(Domain)은 안전하게 보호됩니다.
📝 3줄 요약
Presentation (UI): 화면 보여주기 & 주문 받기
Domain (Biz Logic): 핵심 기능 수행하기 (가장 중요!)
Data (Repository): 데이터 가져오기
'안드로이드' 카테고리의 다른 글
| MVI 라이브러리 Orbit (1) | 2025.12.31 |
|---|---|
| Hilt, 5분 만에 정복하기 (feat. 배달 서비스 비유) (0) | 2025.12.14 |
| Hilt에서 @Provides와 @Binds: 언제, 어떻게 사용해야 할까? (1) | 2025.08.10 |
| LaunchedEffect, DisposableEffect, LifecycleEventEffect, LifecycleStartEffect, LifecycleResumeEffect 정리 (2) | 2025.08.10 |
| Android 프로젝트에 ktlint + Spotless 적용하기 (2) | 2025.07.27 |