일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- builderPattern
- 디자인패턴
- r
- 코틀린
- ㅋㅁ
- 프로토타입 패턴
- 추상 팩토리
- El
- 싱글톤
- Design Pattern
- 함수형프로그래밍
- a
- 추상팩토리패턴
- Abstract Factory
- ㅓ
- designPattern
- 빌터패턴
- Functional Programming
- 팩토리 메소드
- 디자인패턴 #
- factory method
- 옵저버 패턴
- PrototypePattern
- Observer Pattern
- Kotlin
- F
- Singleton
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Koin이란? 본문
Koin은 Kotlin 개발자를 위한 실용적이고 가벼운 의존성(종속성) 주입 프레임워크
장점
- Dagger2에 비해 상대적으로 적은 학습량을 요구함.
- 순수 Kotlin 개발 환경 사용가능
- 어노테이션 및 runTime시에 의존성을 주입하기에 컴파일 시간이 길지 않다.
- 안드로이드 컴포넌트 주입을위한 라이브러리 제공함
단점
- 런타임에 서비스 로케이팅을 통해 인스턴스를 동적으로 주입해주기 때문에 런타임 퍼포먼스가 떨어진다.
- 리플렉션을 이용하기 때문에 성능 상 좋지않다
Kotlin 언어의 힘 덕분에 Koin은 앱에 주석을 달거나 코드를 생성하는 대신 앱을 설명하는 데 도움이 되는 DSL을 제공합니다.
Koin은 Kotlin DSL을 통해 종속성 주입을 준비할 수 있는 스마트 기능 API를 제공합니다.
Application & Module DSL
koin은 koin application의 요소를 설명할 수 있는 몇 가지 키워드를 제공합니다.
koin container 구성을 설명하는 Application DSL
injected 되는 구성 요소를 설명하는 Module DSL
Application DSL
KoinApplication Build하기
koinApplication { } - KoinApplication container 구성 생성
startKoin { } - KoinApplication container 구성을 생성하고, GlobalContext API를 사용할 수 있도록 GlobalContext에 등록.
KoinApplication 인스턴스를 구성을 위한 함수
logger( ) - 사용할 수준 및 로거 구현 설명(기본적으로 EmptyLogger 사용)
module( ) - 컨테이너에 로드할 Koin 모듈 목록을 설정합니다(List 또는 vararg List)
properties() - HashMap 속성을 Koin 컨테이너에 로드
fileProperties() - 주어진 파일의 속성을 코인 컨테이너로 로드
environmentProperties() - OS 환경에서 Koin 컨테이너로 속성 로드
createEagerInstances() - 즉시 인스턴스 생성(createdAtStart로 표시된 단일 정의)
KoinApplication instance: Global vs Local
koin Container 구성은 koinApplication 또는 startKoin 기능의 두 가지 방식으로 설명할 수 있습니다.
koinApplication은 Koin 컨테이너 인스턴스 생성.
startKoin은 Koin 컨테이너 인스턴스를 생성, Koin GlobalContext에 등록합니다.
* container 구성을 GlobalContext에 등록하면 Global API에서 직접 사용할 수 있습니다.
* KoinComponent는 Koin 객체를 의미한다. KoinComponent는 기본적으로 GlobalContext의 것을 사용합니다.
Starting Koin
Koin을 시작한다는 것은 KoinApplication 인스턴스를 GlobalContext로 실행하는 것을 의미
module로 koin container를 시작하기위해 startKoin function을 이용
// start a KoinApplication in Global context
startKoin {
// declare used logger
logger()
// declare used modules
modules(coffeeAppModule)
}
Module DSL
Koin Module은 애플리케이션에 Injection/Combine Definition를 가지고 있다.
module에서 콘텐츠를 구성하는 함수.
factory { //definition } - 팩토리 bean 정의 제공
single { //definition } - 싱글톤 bean 정의 제공(bean으로도 별칭 지정)
get() - 구성 요소 종속성 해결(이름, 범위 또는 매개변수도 사용할 수 있음)
bind() - 주어진 bean 정의에 대해 바인딩할 유형 추가
binds() - 주어진 bean 정의에 대한 유형 배열 추가
scope { // 범위 그룹 } - 범위 정의에 대한 논리 그룹을 정의
scoped { //definition }- 범위에만 존재하는 빈 정의를 제공
* named() 함수를 사용하면 문자열, 열거형 또는 유형으로 한정자를 지정할 수 있습니다. 정의의 이름을 지정하는 데 사용됩니다
Writing a module
koin Module은 모든 component 를 선언하는 공간입니다.
모듈 함수를 사용하여 코인 모듈을 선언합니다
val myModule = module {
}
withOptions - DSL Options
새로운 생성자 DSL 정의와 마찬가지로 withOptions 연산자를 사용하여 "Regular" 정의에 대한 옵션을 지정할 수 있습니다.
module {
single { ClassA(get()) } withOptions {
named("qualifier")
createdAtStart()
}
}
named("a_qualifier") - 정의에 문자열 한정자를 제공합니다.
named<MyType>() - 정의에 유형 한정자를 제공합니다.
bind<MyInterface>() - 주어진 bean 정의에 대해 바인딩할 유형 추가
binds(arrayOf(...)) - 주어진 bean 정의에 대한 유형 배열 추가
createdAtStart() - 코인 시작 시 단일 인스턴스 생성
'Koin' 카테고리의 다른 글
Koin (Scopes) (0) | 2022.07.28 |
---|---|
Koin (Passing Parameters - Injected Parameters) (0) | 2022.07.28 |
Koin Component (0) | 2022.07.28 |
Koin Modules (0) | 2022.07.28 |
Koin Definitions (0) | 2022.07.28 |