안드로이드 Clean Architecture (1)

ansehun·2023년 3월 12일
0

서론

회사에 처음 입사를 한지 일주일 차..ㅎㅎ 온보딩 과제로 Clean Architecture에 대한 과제가 주어졌다. Clean Architecture에 대한 구현 경험이 없기 때문에 공부를 해나가면서 리펙토링 작업을 진행했다. 개인적으로 알고 있는 내용에 대해서 남에게 설명할 수 있어야 나의 지식이 된다고 생각하기에 이렇게 블로그 글을 쓰게 되었다!

Clean Architecture에 대해

(출처: https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc)

위 그림은 Clean Architecture 구조로 매우 유명한 이미지이다. 위 이미지에서 가장 중요한 점은 3가지라고 생각한다.

  • 전체 구조의 관심사를 분리하며 유지 보수, 수정을 할 때 특정 부분만 수정해도 된다. (특정 기능을 수정할 때 코드 상에서 많은 부분을 수정하지 않아도 된다!!)
  • 외부 요소는 세부적이고 변동 가능성이 높은 것을 표현하고 내부 요소는 추상적이고 변동 가능성이 낮은 것을 표현한다.
  • 의존성은 외부에서 내부로 향한다. 가장 안쪽에 있는 Entities는 독립적이기 때문에 외부에 존재하는 Use Cases, Controllers 등이 수정되어도 영향을 받지 않는다.

Clean Architecture에서 의존성이란?
특정 요소를 수정하는 것이 다른 요소의 수정을 야기하는지에 대한 여부.
의존성이 외부에서 내부로 향한다는 것은 내부의 요소를 수정하면 외부의 요소도 수정을 해야한다는 것!

Clean Architecture의 구조

Clean Architecture의 구조는 크게 4가지로 구성된다.

  • Entity(엔티티)
    • 핵심적인 업무 규칙의 캡슐화
    • 변동 가능성이 적음(고수준)
    • ex) data class로 표현한 객체의 형식
  • Use Case(유즈케이스)
    • Application별 비즈니스 규칙의 캡슐화
    • Entity로부터의 데이터 흐름 조합
    • ex) Entity 형식 데이터를 가져오거나 저장하는 역할
  • Interface Adapter(인터페이스 어댑터)
    • Entity, Use Case -> DB, View에 적용될 수 있는 형식으로 변환하는 역할
    • MVVM의 ViewModel, MVP의 Presenter
  • Framework & Driver (프레임워크 & 드라이버)
    • 상세한 정보를 두는 곳
    • UI, DB 등이 이 곳에 속함

안드로이드에서 Clean Architecture?

(출처: https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc)

안드로이드에서 Clean Architecture를 설명할 때 위와 같은 그림이 등장한다. Presentation, Domain, Data와 같이 3개의 Layer로 나타나며 이벤트의 흐름은 Presentation -> Domain -> Data 방향으로 나타난다. 이제 각각의 Layer에서 구성 요소가 무슨 역할을 하는지 설명하겠다.

  • Presentation Layer: UI와 관련된 부분을 담당함.
    • View: UI를 그리는 역할 ex) Activity, Fragment
    • Presenter: 사용자 입력에 대한 반응, 무엇을 그려야 하는지에 대해 결정
  • Domain Layer: 비즈니스 규칙을 포함. 의존성을 맺고 있지 않아 독립적이며 순수 Kotlin 코드로만 구성되어야함.
    • Use Case: Application별 비즈니스 규칙, 하나의 행동을 담당하며 Use Case 이름을 통해 무슨 기능인지 알 수 있어야함.
    • Model: 비즈니스 규칙의 캡슐화, 실질적인 데이터
    • Repository(interface): Use Case가 필요로 하는 데이터의 저장 및 수정 등의 추상적인 기능을 제공하는 영역
  • Data Layer: 실제 데이터가 입출력이 되는 부분
    • Repository(구현체): Domain Layer의 Repository interface에 대해 구체적인 기능을 제공하는 영역
    • Data Source: 실제 데이터의 입출력이 일어나는 곳

(해당 블로그 글에 대해 아직 부족한 부분이 있을 수 있습니다, 피드백은 언제나 환영입니다!)

0개의 댓글