코딩하는 일용직 노동자

안드로이드 클린 아키텍처, 쉽게 이해하기. 본문

안드로이드

안드로이드 클린 아키텍처, 쉽게 이해하기.

bacass 2025. 12. 14. 15:14
안드로이드 개발을 하다 보면 한 번쯤 마주치는 거대한 벽, 바로 **'클린 아키텍처(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): 데이터 가져오기