일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- r
- PrototypePattern
- 팩토리 메소드
- Observer Pattern
- ㅋㅁ
- 추상팩토리패턴
- F
- builderPattern
- ㅓ
- 디자인패턴 #
- Singleton
- Design Pattern
- 빌터패턴
- 싱글톤
- a
- Abstract Factory
- El
- designPattern
- 추상 팩토리
- factory method
- Kotlin
- 디자인패턴
- Functional Programming
- 함수형프로그래밍
- 프로토타입 패턴
- 코틀린
- 옵저버 패턴
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Koin Modules 본문
모듈이란? What is a module?
코인 모듈은 definition를 모으는 "공간"입니다. module{ ... }로 선언
val myModule = module {
// Your definitions ...
}
여러 모듈 사용하기 Using several modules
component가 반드시 동일한 모듈에 있을 필요는 없습니다.
모듈은 definition 구성하는 데 도움이 되는 논리적 공간이며 다른 모듈의 정의에 의존할 수 있습니다.
definition는 lazy되었다가, component가 요청할 때만 주입됩니다
// ComponentB <- ComponentA
class ComponentA()
class ComponentB(val componentA : ComponentA)
val moduleA = module {
// Singleton ComponentA
single { ComponentA() }
}
val moduleB = module {
// Singleton ComponentB with linked instance ComponentA
single { ComponentB(get()) }
}
koin은 import 개념이 없습니다.
koin definition는 lazy
- koin definition는 koin container로 시작되지만 인스턴스화되지는 않습니다.
- instance는 해당 유형에 대한 요청이 완료되었을 때만 생성됩니다.
koin container 를 시작할 때 사용된 모듈 목록을 선언
// Start Koin with moduleA & moduleB
startKoin{
modules(moduleA,moduleB)
}
Overriding definition or module 3.1.0
새로운 코인 override 전략을 사용하면 기본적으로 모든 definition를 재정의할 수 있습니다.
모듈에서 더 이상 override = true를 지정할 필요가 없습니다.
매핑이 동일한 서로 다른 모듈에 2개의 정의가 있는 경우 마지막 정의가 현재 정의를 재정의합니다.
val myModuleA = module {
single<Service> { ServiceImp() }
}
val myModuleB = module {
single<Service> { TestServiceImp() }
}
startKoin {
// TestServiceImp will override ServiceImp definition
modules(myModuleA,myModuleB)
}
allowOverride(false)를 사용하여 Koin 애플리케이션 구성에서 재정의를 허용하지 않도록 지정할 수 있습니다.
모듈 공유하기 Sharing Modules
module { } 함수를 사용할 때, Koin은 모든 인스턴스 팩토리를 미리 할당합니다. 모듈을 공유해야 하는 경우 함수를 만들어서 함께 모듈을 반환하는 것을 고려하십시오.
fun sharedModule() = module {
// Your definitions ...
}
definition를 공유하고 값에 미리 할당된 팩토리를 피할 수 있습니다.
모듈 연결 전략. Linking modules strategies
모듈 간의 definition lazy 되기 때문에 모듈을 사용하여 다른 전략 구현을 구현할 수 있습니다. 모듈별로 구현을 선언합니다.
repository 및 DataSource의 예를 들어 보겠습니다.
repository에는 DataSource가 필요하며 데이터 소스는 로컬 또는 원격의 두 가지 방법으로 구현할 수 있습니다.
class Repository(val datasource : Datasource)
interface Datasource
class LocalDatasource() : Datasource
class RemoteDatasource() : Datasource
component를 3개의 모듈로 선언할 수 있습니다. Repository 및 Datasource 구현당 하나씩
val repositoryModule = module {
single { Repository(get()) }
}
val localDatasourceModule = module {
single<Datasource> { LocalDatasource() }
}
val remoteDatasourceModule = module {
single<Datasource> { RemoteDatasource() }
}
올바른 모듈 조합으로 Koin을 시작하기만 하면 됩니다.
// Load Repository + Local Datasource definitions
startKoin {
modules(repositoryModule,localDatasourceModule)
}
// Load Repository + Remote Datasource definitions
startKoin {
modules(repositoryModule,remoteDatasourceModule)
}
Module Includes(since 3.2 이상)
새로운 function Include()는 Module 클래스에서 사용할 수 있으며,
이를 통해 조직화되고 구조화된 방식으로 다른 모듈을 포함하여 모듈을 구성할 수 있습니다.
Include()의 두 가지 주요 사용 사례
- 큰 모듈을 더 작고 집중적인 모듈로 나눕니다.
- 모듈화된 프로젝트에서는 모듈 가시성을 보다 세밀하게 제어할 수 있습니다.
// `:feature` module
val childModule1 = module {
/* Other definitions here. */
}
val childModule2 = module {
/* Other definitions here. */
}
val parentModule = module {
includes(childModule1, childModule2)
}
// `:app` module
startKoin { modules(parentModule) }
모든 모듈을 명시적으로 설정할 필요는 없습니다.
parentModule을 포함하면 안에 포함에 선언된 모든 모듈이 자동으로 로드됩니다(childModule1 및 childModule2)
즉, Koin은 parentModule, childModule1 및 childModule2를 효과적으로 로드하고 있습니다.
관찰해야 할 중요한 세부 사항은 포함을 사용하여 내부 및 개인 모듈도 추가할 수 있다는 것입니다.
모듈화된 프로젝트에서 무엇을 노출할지에 대한 유연성을 제공합니다.
마지막으로 여러 개의 중첩 또는 중복 모듈을 포함할 수 있으며 Koin은 포함된 모든 모듈을 병합하여 중복을 제거합니다.
// :feature module
val dataModule = module {
/* Other definitions here. */
}
val domainModule = module {
/* Other definitions here. */
}
val featureModule1 = module {
includes(domainModule, dataModule)
}
val featureModule2 = module {
includes(domainModule, dataModule)
}
// `:app` module
startKoin { modules(featureModule1, featureModule2) }
모든 모듈은 dataModule, domainModule, featureModule1, featureModule2와 같이 한 번만 포함됩니다.
'Koin' 카테고리의 다른 글
Koin (Scopes) (0) | 2022.07.28 |
---|---|
Koin (Passing Parameters - Injected Parameters) (0) | 2022.07.28 |
Koin Component (0) | 2022.07.28 |
Koin Definitions (0) | 2022.07.28 |
Koin이란? (0) | 2022.07.27 |