
1. 안드로이드 뮤직 플레이어 앱 만들기 with ExoPlayer, Kotlin 이번에는 멜론 같은 안드로이드 뮤직 재생 앱을 만들어 보는 프로젝트를 진행해보았습니다. 서버 에서 음악 정보들을 받아와 재생 목록을 구성하고 재생 및 일시정지, 다음 곡, 이전 곡, 곡 위치 탐색 등의 기본적인 기능을 수행할 수 있도록 구현했습니다. 주요 기능 음악 서버에서 음악 받아와 재생 목록 구성하기 현재 재생 중인 음악 재생 목록에서 표시 (회색 배경) 재생/일시정지, 이전 곡/다음 곡 재생 기능 seekBar 를 통한 음악 탐색 기능 재생 목록 음악 뷰 전환 가능 사용 기술 Exoplayer 커스텀 컨트롤러 playlist androidx.constraintlayout.widget.Group 기타 SeekBar C..
12. 멀티 바인딩 하기 dagger의 멀티 바인딩을 사용하면 여러 모듈에 있는 같은 타입의 객체를 하나의 set, map 형태로 관리 가능 Set 멀티 바인딩 @IntoSet, @ElementsIntoSet -> @Provides 예제 코드 import dagger.Module import dagger.Provides import dagger.multibindings.ElementsIntoSet import dagger.multibindings.IntoSet @Module class SetModule { @Provides @IntoSet fun provideHello() = "Hello" @Provides @IntoSet fun provideWorld() = "World" @Provides @Eleme..
11. Dagger 바인딩의 종류 @Binds 모듈 내의 추상 메서드에 붙일 수 있음 추상 메서드 앞에 붙여 Binding을 위임 하는 annotation 반드시 하나의 매개 변수만을 가져야 함 매개 변수를 반환형으로 바인드할 수 있다. @Provides 메서드 대신 좀 더 효율적으로 사용할 수 있다. @Module abstract class MyModuleRandom{ @Binds abstract fun bindRandom(secureRandom: SecureRandom):Random } Random 객체를 SecureRandom 객체에 바인딩 @Binds는 객체를 생성하는 대신 Component 내에 있는 객체를 파라미터로 받아 바인딩하여 좀 더 효율적으로 동작하게 해줌 좀 더 자세한 예제 보러가기 ..
10. 범위 지정하기 각 컴포넌트에 @Scope 로 범위 지정 가능 하나의 인스턴스만 만들어서 참조하는 싱글턴 패턴과 비슷 컴포넌트의 인스턴스는 의존성의 제공 방법에 대한 동일 성을 보장 받을 수 있음 앱 생명주기와는 달리 별도로 생명 주기를 따로 관리 가능 example 안드로이드에서 애플리케이션, 엑티비티, 프래그먼트 인스턴스에 때한 범위 지정을 다르게 해서 관리하여 오브젝트 그래프의 생성과 소멸을 각자 관리 가능함 @Singleton 사용하기 @Singleton을 사용한 범위 지정 및 객체 재사용 @Singleton @Component(modules = [MyModule2::class]) interface MyComponent2{ fun getAny():Any } @Module class MyMod..
09. 한정자 지정하기 반환형으로 바인드된 객체를 식별하기 애매할 때 example: string 타입 2개를 반환 하는 경우 @Module class MyModuleEx{ @Provides fun provideHello() = "Hello" fun provideWorld() = "World" } string 형식 반환이 2개 있으므로 오류! 그러나 2개가 필요한 상황이 있을 수 있다. 이럴때는 javax.inject package 에서 @Named 어노테이션을 사용할 수 있다. import dagger.Component import dagger.Module import dagger.Provides import javax.inject.Inject import javax.inject.Named @Compo..