추천 글

안드로이드 Kotlin Hilt로 의존성 주입(DI) 사용하기 2편

이미지
개발환경 안드로이드 스튜디오 4.1.1 JDK 1.8 Kotlin 1.4.20 모든 코드는  https://github.com/aispark/myhilt 에 있습니다. Hilt 모듈 생성자 삽입할 수 없는 상황(외부 라이브러리, 인터페이스일 경우)에서는 Hilt 모듈을 사용하여 Hilt에 바인딩 정보를 제공할 수 있습니다.  @Module @InstallIn (ApplicationComponent:: class ) object HashcodModule { @Provides fun provideHashcode () = hashCode().toString() } 필드 삽입을 실행할 수 있는 각 Android 클래스마다 @InstallIn 주석에 참조할 수 있는 관련 Hilt 구성요소가 있습니다. 각 Hilt 구성요소는 해당 Android 클래스에 결합을 삽입해야 합니다.  ApplicationComponent 는 인젝터 되는 클래스가 Applicaiton 입니다. @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var singletonClass : SingletonClass @Inject lateinit var hashcode : String override fun onCreate (savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) setContentView(R.layout. activity_main ) Log.d( "singleton" , singletonClass .hashCode().toString()) Log.d( "singleton" , "hashcode: $ hashcode " ) } } 다른 Activity나 Fragmen...

안드로이드 Kotlin Hilt로 의존성 주입(DI) 사용하기 1편

이미지
의존성 주입 의존성 주입은(DI) 프로그래밍에 널리 사용되는 개념입니다. DI 원칙을 따르면 훌륭한 앱 아키텍쳐 토대를 만들 수 있으며 다음과 같은 이점이 있습니다. 코드 재사용 가능 리팩토링 편의성 테스트 편의성 앱에서 Hilt 사용하기 Hilt는 Android에서 의존성 주입을 위한 Jetpack의 권장 라이브러리입니다. Hilt는 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써 애플리케이션에서 DI를 실행하는 표준 방법을 정의합니다. Hilt는 인기 있는 DI 라이브러리 Dagger를 기반으로 빌드되었으며 앱에 적용하기 어렵다는 단점을 개선되어 비교적 쉽게 앱에 적용할 수 있습니다. 개발환경 안드로이드 스튜디오 4.1.1 JDK 1.8 Kotlin 1.4.20 모든 코드는  https://github.com/aispark/myhilt 에 있습니다. 프로젝트 생성 Empty Activity 선택 Language를 Kotlin으로 선택 Minimum SDK API21 선택 후 Finish 클릭 레이아웃 액티비티와 프레그먼트를 이동하면서 주입되는 인스턴스가 싱클턴인지 확인합니다. 소스는  https://github.com/aispark/myhilt 에서 확인하세요. 의존성 추가 buildscript { ... dependencies { ... classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha' } } 프로젝트의 루트 build.gradle  파일에 추가합니다. plugins { ... id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } dependencies { ... //navgation 의존성 추가 implementation 'androidx.navigation:n...

안드로이드 retrofit2, moshi, 코루틴을 이용한 비동기 rest api 호출하기

이미지
개발환경 안드로이드 스튜디오 4.1.1 JDK 1.8 모든 코드는  github 에 있습니다. 프로젝트 생성 Empty Activity 선택 Language를 Kotlin으로 선택 Minimum SDK API21 선택 후 Finish 클릭 의존성 추가 //retrofit2 implementation 'com.squareup.retrofit2:retrofit:2.7.1' implementation 'com.squareup.retrofit2:converter-moshi:2.7.1' def lifecycle_version = "2.2.0" implementation "androidx.lifecycle:lifecycle-runtime-ktx: $lifecycle_version " com.squareup.retrofit2:retrofit는 retrofit2를 사용하기 위한 라이브러리 com.squareup.retrofit2:converter-moshi는 json 문자열을 data class로 자동변환 해주기 위한 라이브러리 androidx.lifecycle:lifecycle-runtime-ktx 코루틴을 사용하기 위한 라이브러리 data class 작성 https://jsonplaceholder.typicode.com/todos/1 리턴되는 json을 object로 컨버팅 합니다. 해당 url을 요청해 보면 { "userId" : 1 , "id" : 1 , "title" : "delectus aut autem" , "completed" : false } 위와 같은 구조의 데이터를 response 해줍니다. 각각의 propery에 대응하는 data class를 생성합니다. data class Todo( var userId : Int , ...

Kotlin Room database, KTX ViewModel을 활용을 한 메모앱 만들기

이미지
개발환경 안드로이드 스튜디오 4.1.1 JDK 1.8 모든 코드는  간단한 메모앱(github) 에 있습니다. 완성된 앱 프로젝트 생성 Empty Activity 선택 Language를 Kotlin으로 선택 Minimum SDK API21 선택 후 Finish 클릭 UI 그리기 ConstraintLayout에 값을 입력할 EditText 하나, 이벤트를 위한 Button 하나 입력 된 데이터를 보여주기 위한 TextView 하나를 그려줍니다. <androidx.constraintlayout.widget.ConstraintLayout xmlns: android ="http://schemas.android.com/apk/res/android" xmlns: app ="http://schemas.android.com/apk/res-auto" xmlns: tools ="http://schemas.android.com/tools" android :layout_width ="match_parent" android :layout_height ="match_parent" tools :context =".MainActivity" > <EditText android :id ="@+id/editTextTextPersonName" android :layout_width ="0dp" android :layout_height ="wrap_content" android :layout_marginStart ="16dp" android :layout_marginTop ="16dp" android :layout_marginEnd ="16dp...

구글블로그에 code block 이쁘게 삽입하기 (highlight.js)

이미지
구글블로그(blogspot)에 highlight.js을 사용해서 아래와 같은 style이 적용된 code block을 삽입할 수 있습니다. resize() { this.stageWidth = document.body.clientWidth; this.stageHeight = document.body.clientHeight; this.canvas.width = this.stageWidth * 2; this.canvas.height = this.stageHeight * 2; } style이 적용된 code block 구글블로그(blogspot)에 적용하기 1. 관리자 화면에서 테마 클릭 2.  "▼" 아이콘 클릭 3. HTML 편집 클릭 <script async='async' src='https://www.gstatic.com/external_hosted/clipboardjs/clipboard.min.js'/> <link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/styles/default.min.css' rel='stylesheet'/> <script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/highlight.min.js'/> <script>hljs.initHighlightingOnLoad();</script> 4. 내용을 복사합니다. 5. 본문에 "✔" 한번 클릭한 후 CTRL + F 를 누르면 Search 가 활성화 됩니다. 6. "</head>"를 입력해서 라인을 찾습니다. 7. "</head>" 라인 위에 4번에서 복사한 내용을 붙여넣기 합니다. T...

로또 당첨 확률 계산

로또 당첨 확률이 궁금하여 몇번 만에 1등에 당첨되는지 알려주는 앱을 만들어봤어요. 먼저 1~45 사이의 숫자를 랜덤으로 6개 추출하는 function을 만듭니다. const   BALL_MAX   =   6 ; //로또 6개의 숫자 const   run   =  ()  =>  {    const   numArray   =   Array ( 45 )     . fill ()     . map (( _ ,  i )  =>   i   +   1 );    let   result   =  [];    for  ( let   i   =   - 1 ;  ++ i   <   BALL_MAX ; ) {      const   num   =   Math . floor ( Math . random ()  *   45 )  -   i ;      result [ i ]  =   numArray [ num ];      numArray . splice ( num ,  1 );     //선택된 번호는 삭제한다.   }    return   result ; }; 당첨 숫자를 몇번만에 찾는지 출력합니다. const   findWinning   =  ( times )  =>  { ...