반응형

연말 연초에 1달에 게시물 한 개 이상 쓰기를 목표했는데, 벌써 한달이 지나고 2월말이 되버렸다....
뭔가 많이 하긴 했는데, 개발 공부는 열심히 못했던 것 같다.
원래 목표는 2월에는 RX에 관련된 게시물을 쓰려 했는데, 시간이 없어서 DI에 대해 간단히 적어보려 한다....

DI에 대해 정리하려고 구글링을 하던 중 생각보다 나처럼 DI개념을 매우 어렵게 생각하여 공부를 미뤘던 사람들이 많다는 걸 알게 되었다.
취준하기 전에 DI에 대해서 공부를 해야지 해야지 하면서 계속 미뤘던 기억이 문득 생각나서 이 기회에 정리하려고 가져왔다.

DI(Dependency Injection)

ex)class A, class B
class B가 특정 작업을 위해 A의 인스턴스가 필요할 때, B에서 A의 인스턴스를 만들어서 사용하는데, DI는 이러한 처리를 대신 해줌.

DI의 장점

  • 의존 관계 설정이 실행시에 이루어지므로 컴포넌트 간의 결합도를 낮춘다.
  • 코드 재사용성이 증가한다.
  • 단위 테스트의 편의성을 높여 준다.
  • 스코프를 사용하여 객체를 관리할 수 있다.

Android DI

  • Dagger
  • Koin
  • Hilt

Android에서 보통 DI를 사용할 때 내가 알기로는 위에있는 저 3녀석을 사용한다.
Hilt는 Dagger를 개선해서 만든 것으로 알고 있다.
나는 실무에서 Koin을 사용하기 때문에 Koin에 대해서만 간단하게 작성하려 한다.

Koin

Koin은 kotlin으로만 구현되어 있다.

Koin을 사용하기에 알아야 될 메서드들은 다음과 같다.(이것만 알면 거의다 쓸 수 있음...)

Koin 사용하기 위해 알아야 할 용어

  • modules { … } - module이 여러개일때 사용(안에 모듈들)
  • module { … } - Koin에서 모든 종속성을 제공하는 데 사용할 모듈을 Koin에 만듭니다.
  • single { … }- 앱 전체에서 단일 인스턴스로 사용할 수 있는 싱글톤을 생성합니다.
  • factory { … } - 주입될 때마다 새 인스턴스를 생성하는 빈 정의를 제공합니다.
  • get() - 의존성 주입 - 바로 주입(모듈 내부에서 사용하는 것 같음)
  • by inject() - 의존성 주입 - Lazy 방식
  • named(”name”) - 의존성 주입할 객체 이름 지정 → single(named(”cho”)) { … }
  • getProperty(”name”) - “name”이라는 프로퍼티를 가져와 사용함
  • androidContext(this@MainActivity) - koin의 생명주기를 결정(?)
  • startKoin{ … } - Application 단에서 module별로 주입을 해준다

 

3월에는 미리미리 준비해서 좀더 완성도 높은 게시물을 작성해야겠다...

반응형

'Android' 카테고리의 다른 글

Foreground Service  (0) 2023.06.02
Service  (0) 2023.05.24
해상도  (0) 2023.04.30
DataStore  (0) 2023.01.23

+ Recent posts