목록전체 글 (5)
끄적끄적
뷰 바인딩은 사용법은 널리 알려졌을 것이라 생각한다. 하지만, 생각을 잘 해보지 못했던 부분에 대해서 기록에 남겨보고자 한다. JetPack Compose가 정식으로 소개되었지만, 현재까지는 대부분 앱을 제작할 때 xml을 통하여 제작을 하는 경우가 많을 것이라 생각된다. 그 중에서도, 를 사용하여 레이아웃을 재사용 할 때는 어떻게 사용해야할지 잘 모르는 경우가 있었다. ViewHolder를 생성할 때 처럼, parent를 지정하여 bind 시켜주는 줄 알고 IncludeLayoutBinding.inflate(context, parent, false) 와 같은 방법으로 선언을 하고 사용을 하려고 하니까 컴파일은 잘 되었지만, 올바르게 동작하지 않았다. 뷰 바인딩으로 생성된 코드 코드에서는 include ..
탑레벨 함수 사용할 함수들이 하이레벨이거나, 일반적이거나, 넓게 사용될 때 싱글톤 함수들이 상태에 연관되어 있을 때
JVM에서는 제네릭을 사용할 때 Java의 타입 이레이저때문에 컴파일 타임에 타입 정보가 사라진다. 코틀린은 구체화된 타입 파라미터(Reified Type Parameter)를 통해서 이러한 문제를 해결할 수 있다. abstract class Person(val name: String) class Man(name: String) : Human(name) class Woman(name: String) : Human(name) 위와 같은 클래스들이 있다고 가정을 했을 때, 아래와 같은 리스트를 만들 수 있다. val people: List = listOf(Man("Homer Simpson"), Woman("Marge Simpson"), Man("Bart Simpson"), Woman("Lisa Simpson..
run - 또 다른 스코프를 정의할 수 있다. 블록 안에서의 마지막 객체를 반환한다. fun test() { run { Toast.makeText(applicationContext, "Toast Message", Toast.LENGTH_SHORT) }.show() } with vs T.run with(view) { visibility = View.VISIBLE } view.run { visibility = View.VISIBLE } - with은 일반적인 함수이고, T.run은 확장 함수이다. - 'view?.run { }'으로 하면 코드 수행 전에 null 체크가 가능하다. run vs let someString?.run { println("${this} not null") } someString?.l..
kapt - Kotlin Annotation Processing Java의 Annotation Processing을 사용하기 위해 필요한 플러그인 사용법 app 수준의 build.gradle에서 아래와 같이 선언해주면 된다. plugins { id 'kotlin-kapt' } 그 후, dependencies에 라이브러리를 추가시킬 때 'annotationProcessor' 대신 'kapt'를 사용해주면 된다. 단, 모든 라이브러리가 정상적으로 동작한다는 것을 보장하지는 않는다. 해당 라이브러리에서 kotlin과의 호환성을 보장하는지 확인을 해봐야 한다.