First-party tooling 🧐 Exploring Android KTX Android KTX는 Android 프레임워크 및 Jetpack을 위한 다양한 확장 세트입니다. 그는 Android KTX 확장 자체가 Jetpack의 일부이며 간단한 Gradle 종속성으로 프로젝트에 추가할 수 있습니다. Android KTX에서 제공하는 기능은 확장 기능 및 고차 기능과 같은 기능을 활용하여 Android API를 보다 Kotlin 관용적으로 만드는 것을 목표로 합니다. 종속성을 보다 가볍게 만들기 위해 Android KTX는 제공하는 기능에 따라 여러 개의 작은 종속성으로 나뉩니다. 그 중 일부는 다음과 같습니다. Core KTX Fragment KTX SQLite KTX ViewModel KTX Nav..
Better companion companion object 는 바깥 클래스(enclsosing class) 에서 메서드나 프로퍼티를 접근할 수 있게하는 효율적인 방법입니다. 약간 Java 의 Static 느낌이라고 할 수도 있습니다. 하지만, companion object 를 자바에서 참조할 떄는 살짝 복잡할 수 있습니다. 그럼 어떻게 효율적으로 사용할 수 있는지 알아봅시다. 어떻게 companion object 가 동작할까 코틀린 클래스에 컴패니언 객체가 선언되면 컴파일러는 컴파일 때 명명된 내부 클래스를 생성하게 됩니다. 아래 코드는 빈 컴패니언 객체를 사용했습니다. class Widget { companion object { } } 앞의 코드에 의해 Java 코드가 컴파일러에 의해 생성되면 아래와..
1. 코틀린 인터페이스의 Default implementation 과 JAVA 코틀린의 인터페이스는 추상 메서드 뿐만이 아니라 구현이 있는 메서드 즉, Default 메서드를 정의할 수 있다. (하지만 필드(상태)는 불가능하다.) 클래스는 class 로 정의하듯 인터페이스는 interface 로 정의 한다. interface Clickable { fun click() } 위 인터페이스는 click() 이라는 추상 메서드를 정의하며 이를 구현하는 클래스는 click()을 반드시 재정의할 필요가 있다. class Button : Clickable { override fun click() = println("it was clicked") } 자바와 달리 콜론(:) 뒤에 확장할 클래스나 인터페이스를 붙여준다. ..
1. 코틀린 버전 1.4 에서 1.5 대로 업데이트 후 코드 작동 안함 얼마전 배포된 코틀린 버전 15.2 을 받고 나서 원래는 1.4.30 버전에서 잘 동작하던 코드가 동작하지 않는 현상을 발견했다. 처음에는 intelij프로젝트 설정을 잘 못한건가 해서 계속 다시만들고 source root directory 도 바꿔가면서 몇 시간동안 삽질을 하였다. 해당 코드는 코테를 보면서 알고리즘 문제를 풀며 작성한 코드로 해당 테스트에서 사용한 코틀린 컴파일러 버전대는 1.3.x 이었던 걸로 기억한다. 불과 1~2주 정도 전이라 나의 ide도 코틀린 1.4 버전대를 사용하고 있어서 문제가 되지 않았다. 문제의 코드 class Solution { fun solution(bricks: IntArray, n: Int..
1. 안드로이드 dp 값을 px 값으로 알맞게 변환해주는 코드 안드로이드 개발 시 dp 값을 사용해서 ui를 나타내게 되면 각 기기의 해상도나 크기마다 알맞은 비율을 유지하면서 디자인을 보여줄 수 있습니다. 하지만 간혹 가다 dp 값이 아닌 px 값을 인자로 받는 매서드를 사용한다던가 px값이 필요한 경우 알맞게 구해주는 것이 필요합니다. 아래 코드는 dp 값을 context의 알맞은 dp값으로 변환해주기 때문에 융통성있게 마찬가지로 px 을 거의 dp 를 사용하는 것 처럼 사용해줄 수 있습니다. px값이 불가피하게 필요한 경우 사용하시면 되겠습니다. private fun dp2px(context: Context, dp: Int): Int { return TypedValue.applyDimension( ..
1. 코틀린의 코루틴(Coroutine) 이란? 안드로이드 프로그래밍을 코틀린으로 할 때 코루틴 이라는 것을 사용할 수 있는데요? 코틀린의 '코'를 따서 'Ko'루틴 인줄 알았지만 사실 코루틴의 코는 co(함께, 동시에) 라는 의미를 가지고 있습니다. 즉, 동시성 프로그래밍 개념을 코틀린에 도입한 것이 코루틴 이라고 합니다. 내용추가 21.08.24) 코루틴은 코루틴이 시작된 스레드를 중단하지 않으면서 비동기적으로 실행되는 코드입니다. 기존의 복잡한 AsyncTask 또는 다수 스레드 관리를 직접 해주지 않아도되며, 기존 다중 스레드 보다 훨씬 더 효율적으로 동작합니다. 코루틴의 특징으로는 코루틴은 스레드 위에서 실행되는데 여러가지 코루틴이 존재한다고 할때 코루틴1,2,3 이 있다고 칠 때 코루틴1 을 ..
1. 안드로이드 Room 으로 로컬 데이터베이스에 데이터 저장하기 Android 개발자 라이브러리 Room은 SQLite를 추상화 하여 제공하기 때문에 보다 쉬운 데이터 베이스 사용이 가능합니다. 또 물론 SQLite에서 지원하는 것을 완벽하게 활용할 수 있다고하네요. 그래서 이번에 계산기 예제를 만들면서 계산 히스토리를 저장할때 Room을 사용해서 로컬 데이터베이스에 기록을 해주는 방식으로 구현을 해보았답니다. 1.1. Room 사용에 좋은 예시 공식 문서에 있는 바를 간단하게 요약하자면, 유저가 앱을 실행하는 환경이 오프라인이었을 경우에는 이전에 온라인 상태에 있을 때 컨텐츠를 Room을 통해 저장해둔 컨텐츠를 불러와서 보여주며 유저와 상호작용을 하다가 이후에 다시 온라인 상태가되면 유저가 동작한 내..
1. 코틀린 Null이 허용된 변수 선언하기 보통 null이 허용된 변수라면 해당 변수에 아무것도 할당하지 않거나 null을 할당하고 사용할 경우 NullPointerException 일명, NPE가 발생하게 됩니다. 코틀린은 기본적으로 null을 허용하지 않고 null 허용 변수를 따로 만드는 방법으로 이 문제를 방지하고자 합니다. 😃 1.1. null 을 허용하지 않는 코틀린 아래 코드는 변수에 null을 할당하는 코드입니다. 코틀린에서는 이러한 방식은 에러입니다. 실제로 IDE 상에서 아래 코드를 입력해보면 빨간줄이 뜨는 것을 볼 수 있습니다. fun main() { var str1 : String = "Hello Kotlin" str1 = null // Error! println("str1: $s..
1. 코틀린 프로젝트 IntelliJ 에서 GitHub 연동하기 인텔리제이에서는 새로운 프로젝트를 만들고 이를 GitHub에 공유하여 레포지토리를 생성할 수 있습니다. 그 방법을 소개하도록 하겠습니다. 깃허브와 연동하여 커밋 푸시하는 경우 온라인 저장소에 이력을 남김으로써 인터넷 연결만 있다면 진행중인 프로젝트를 바로 가져올 수 있다는 장점이 있습니다. 먼저 IntelliJ의 메뉴 중에서 VCS 메뉴를 클릭해줍니다. VCS는 버전 관리 시스템(Version control system)의 약자로 말 그대로 프로젝트 소스 버전관리에 사용되는 메뉴들을 가지고 있습니다. VCS 메뉴들을 보면 여러가지 메뉴가 있는데 그 중에서 우리는 Share Project on GitHub 라고 되어있는 녀석을 사용하도록 하겠..
1. 코틀린 New Package, class 사라짐 안보임 해결 인텔리제이(IntelliJ)를 받고 나서 처음 프로젝트를 생성하고 패키지를 생성하는 예시 학습을 하려고 하는데 [New Package]는 보이지 않고, New - Directory 만 있더라고요. 당황스러워서 구글에 검색해보니 해결책을 찾을 수 있었습니다. 1.1. 문제 현상 아래와 같이 src 우클릭 하여 New 메뉴에 Package가 없고 Directory만 있는 경우 입니다. 또는 Class 등 추가가 없는 경우에도 해당될 수 있습니다. IntelliJ does not show 'Class' when we right click and select 'New' 1.2. 해결 방법 해결 방법은 간단합니다. 해당 폴더가 Sources Roo..