Android Clean Architecture -1-

한창희·2021년 8월 5일
0

<클린 아키텍처 주요 특징>

  • 경계선 : 계층 구조의 개념이 널리 적용

  • 유스케이스 : 도메인 계층의 분리로 소스코드 변경 안정성이 높아짐
    소스코드 변경되어도 유스케이스만 교체하면 된다

  • 험블 오브젝트 : 프리젠테이션 계층의 테스트 가능성, 가독성, 유지보수성을 향상

  • 의존성 역전 : modular한 프로젝트 구조의 확산(모듈 단위)


< DI - Dipendency Injection 의존성 주입 >

  • 컴포넌트 간의 의존 관계를 소스코드 내부가 아닌 외부 설정 파일등을 통해 정의되게 하는 디자인 패턴 중 하나

  • 객체를 직접 생성하지 않고 외부에서 주입한 객체를 사용하는 방식

  • 인스턴스 간 디커플링을 만들어줌 -->> 유닛테스트 용이성 증대

ex> Hilt, Dagger


< Service Locator >

  • 중앙 등록자인 'Service Locator'를 통해 요청이 들어왔을 때 특정 인스턴스 반환

  • apk 크기, 빌드 속도, 메서드 수 등 복잡한 제약이 있는 경우 사용하기 편함

  • ex> Koin (경량화된 DI라고 소개하지만, 내부 동작은 Service Locator로 봐도 무방)

  • 장점 : DI에 비해 application 크기 작다 /
    빌드 속도 빠르다 / DI보다 메서드 수 적다


< Koin >

@@ 대표 키워드 @@

  • module{...} : 키워드로 주입받고자 하는 객체의 집합
  • single{...} : 앱이 실행되는 동안 계속 유지되는 싱글톤 객체 생성
  • factory{...} : 요청할 때마다 매번 새로운 객체를 생성
  • get() : 컴포넌트 내에서 알맞은 의존성을 주입

@@ 장점 @@

  • Kotlin에 도입하기 용이
  • 별도의 어노테이션을 사용하지 않으므로 컴파일 시간 단축
  • ViewModel 주입을 쉽게 할 수 있는 별도 라이브러리 존재

@@ 단점 @@

  • 런타임 시 주입이 필요한 컴포넌트가 생성이 되어있지 않는 파라미터가 존재하는 경우 크래시 발생

  • 컴파일 타임에 주입 대상을 정하는 DI에 비해 런타임에 서비스 로케이팅을 통해 인스턴스를 동적으로 주입해주기 때문에 런타임 퍼포먼스가 떨어진다

profile
매 순간 최선을 다하자

0개의 댓글