-
클린 아키텍처 소개Clean Architecture 2025. 4. 6. 16:30
안드로이드에서 중요한 개념인 클린 아키텍처에 대해 소개해보고자 합니다.
클린 아키텍처란?
클린 아키텍처는 소프트웨어의 구조를 설계할 때 지켜야 할 원칙과 방법을 의미합니다. 관련 다이어그램을 살펴볼까요?
클린 아키텍처 다이어그램 클린 아키텍처는 여러 계층으로 나누어져 있는데요. 먼저 의존성 규칙과 모듈의 의미에 대해 먼저 알아보겠습니다.
의존성 규칙과 모듈
각 계층은 바깥에서 안쪽 방향으로 의존합니다. 따라서, 외부는 내부를 알 수 있지만 내부는 외부에 대해서 알지 못합니다.그리고, 외부의 변경사항이 내부에 변경을 주면 안됩니다.
모듈에는 고수준 모듈과 저수준 모듈이 있는데요. 관련해서 표로 정리해보았습니다.
고수준 모듈 저수준 모듈 핵심적인 비지니스 로직 (추상화) 상세한 기능 구현 변경사항 거의 없음 변경사항이 잦음 동심원 안쪽 동심원 바깥쪽 범용성이 높음 범용성이 낮음 각 동심원 계층의 의미
1. Entities
- 가장 안쪽 동심원
- 가장 핵심적인 로직을 캡슐화
- 가장 고수준 모듈
- 가장 변화하지 않음
2. Use Cases
- 애플리케이션이 갖는 기능, 비즈니스 로직 등을 단일 책임 원칙(SRP)을 준수하고 캡슐화하여 구현한 계층
- 상세한 구현 내용 x
- 인터페이스, 추상 클래스
3. Controllers (= Interface Adapter)
- Use Cases 의 interface 나 abstract class 에 대한 상세 구현 (lmpl)
- 각자의 계층에서 가장 사용하기 편리한 모델 타입으로 형변환하는 매퍼(mapper) 역할
4. Framework, Driver
- 가장 바깥쪽 동심원
- 안드로이드 프레임워크 및 라이브러리를 포함한 모든 세부적 내용 포함
- android sdk, activity, fragment
각 계층의 의미에 대해 살펴보았는데요. 각 계층은 어떻게 상호작용하는지 알아보겠습니다.
계층간 횡단하기
계층간 횡단 DB 와 UI 가 상호작용하는 제어 흐름(Flow of control) 을 살펴보겠습니다. 화면에 목록을 갱신하는 버튼을 눌렀을 때 recyclerview 나 lazyColumn 을 사용하여 리스트를 보여주는 예시가 있습니다. 먼저 UI → Presenter → Use Cases → Entities 로 이동합니다. 이후, Entites → Use Cases → Controller → DB 로 이동합니다.
중간에 있는 Controller 나 Presenter 는 각 계층이 이해할 수 있는 DTO 타입으로 변환해주는 mapper 역할을 합니다.
이때, 바깥쪽에서 안쪽으로 이동할 때는 의존성 방향과 동일하지만, 안쪽에서 바깥쪽으로 향하는 경우는 의존성 방향과 반대입니다. 이때는 어떻게 해야할까요? 이를 위해서는 두가지 원칙이 적용됩니다.
1. 인터페이스 분리 원칙
2. 의존성 역전 원칙
안쪽 계층은 바깥쪽 계층을 알지 못하기 때문에, 안쪽에서 인터페이스 선언하고 바깥쪽에서 인터페이스 구현하는 식으로 의존성을 역전시켜 계층을 횡단할 수 있습니다.
중요 내용 정리
클린 아키텍처의 원리와 요소에 대해 간단하게 알아봤는데요. 중요 내용을 3가지 요약할 수 있습니다.
- 의존성 방향은 바깥쪽에서 안쪽을 향한다
- 동심원 안쪽은 추상화 레벨이 높아진다. (고수준 모듈)
- 계층을 횡단할 때는 인터페이스 분리 원칙과 의존성 역전 원칙이 적용된다
다음에는 클린 아키텍처를 좀 더 자세히 살펴보겠습니다🐣
'Clean Architecture' 카테고리의 다른 글
Local 레이어란? (4) 2025.08.10 Remote 레이어란? (6) 2025.08.03 Data 레이어란? (2) 2025.07.27 Domain 레이어란? (2) 2025.07.20 클린 아키텍처 파헤쳐보기 (0) 2025.04.20