2026의 게시물 표시

Android How to use EditTextPreference by not string types

이미지
사용 언어: Kotlin 2.3.0 사용 버전: Android Studio Otter 3 Feature Drop | 2025.2.3 안드로이드 How to use EditTextPreference by not string types를 알아보겠습니다. EditTextPreference(에딧 텍스트 프레퍼런스)는 SharedPreferene(셰어드 프레퍼런스)의 값을 보여주고 수정할 수 있게 해줍니다. 하지만, 하나의 문제가 있는데요. SharedPreference의 다양한 Type(타입)을 전부 사용할 수 없다는 점입니다. String(문자열)으로만 받으며, 다른 Type을 넣을 시 타입 변환 오류를 반환하며 종료됩니다. 그럼 우리는 SharedPreference에 Int(인트), Long(롱), Float(플롯) 형을 String으로 저장해야 하는 것일까요? 그럼 조금 불편할 것 같네요. 해결책으로는 EditTextPreference를 우리 입맛에 맞게 Custom(커스텀) 하는 방법이 있습니다. 아무 Kotlin 파일이나 만들어줍니다. 저는 이름을 CustomEditTextPreference라고 지었습니다. EditIntPreference를 만들어 준 다음, EditTextPreference를 상속받습니다. 그리고 EditTextPreference가 가지고 있는 모든 생성자의 경우를 작성해 줍니다. 그리고 하단에 getPersistedString과 persistString을 아래와 같이 override(오버라이드) 합니다. 33번 줄은 EditTextPreference에서 String을 가져올 때, getPersistedString이 호출이 되는데, 우리는 Int형을 사용하므로 getPersistedInt로 치환해서 사용합니다. 39번째 줄은 EditTextPreference가 업데이트될 때의 행위를 정합니다. xml에 다음과 같이 사용할 수 있습니다. 원래 EditTextPreference는 자동으로 SharedPreference의 값을 최신화하지만, 우린...

Android R class

이미지
사용 언어: Kotlin 2.3.0 사용 버전: Android Studio Otter 2 Feature Drop | 2025.2.2 안드로이드 R class를 알아보겠습니다. 알(R) 클래스(class)는 안드로이드의 리소스(resource)에 아이디(id)로 접근 가능하게 해주는 class입니다. 아래의 사진처럼 패키지(package) 경로를 적어주며 임포트(import) 할 수 있습니다. 그런데, 저 package 경로에 들어가는 건 어떤 것이 들어가는 것일까요? bookmarks를 한 번 봅시다. 놀랍게도 impl이라는 package가 없습니다. 그럼 impl은 어디서 온 것일까요? 바로 build.gradle.kts의 namespace에서 왔습니다. 즉, 실제 package와는 상관없이 namespace에 적힌 값으로 R의 경로가 생성됩니다. 끝. 카테고리: Android

How to run Kotlin files in a command-line

이미지
사용 버전: Kotlin 2.3.0 How to run Kotlin files in a command-line을 알아보겠습니다. 어떻게 코틀린(Kotlin) 파일들을 커맨드 라인(command-line)에서 실행할 수 있을까요? 참고한 문서입니다. https://kotlinlang.org/docs/command-line.html 보통은 아이디이(IDE)에서 실행하기 때문에 컴파일러(compiler)를 수동으로 받을 필요가 없습니다. 그렇지만, 저는 CI에서 돌려보려고 수동으로 받아보았는데요. 여기서 최신 컴파일러를 받을 수 있습니다. 현재 최신 버전은 2.3.0이네요. https://github.com/JetBrains/kotlin/releases 저는 kotlin-compiler-2.3.0.zip을 다운로드했습니다. 압축을 풀면 kotlinc라는 디렉터리가 생깁니다. bin이라는 디렉터리에 들어가면 다음과 같이 우리가 사용할 수 있는 프로그램들이 나옵니다. 여기서 Compiler는 kotlinc입니다. 그럼 kotlin 파일을 만들어 볼까요? test.kt라는 파일로 바탕화면에 만들었습니다. 위 코드는 아래에서도 볼 수 있습니다. https://pl.kotl.in/czIx_jKTs 그럼 실행해 봅시다. 먼저 compile을 해서 jar로 만들어 줘야 합니다. kotlinc/bin으로 가서 ./kotlinc [Kotlin 파일] -include-runtime -d [결과.jar 파일] 을 적어주면 됩니다. 그럼 이런 jar이 생깁니다. 잘(Jar)은 자바(Java)의 .class 파일들을 모아놓은 압축 형식입니다. .class는 Java 바이트코드(bytecode)로 변환된 파일입니다. Java에 대해 간단히 설명하자면, Java 언어로 작성된 코드를 javac라는 compiler가 .class 형식인 java bytecode로 변환하고 이것을 모아 Jar로 만듭니다. 이 java bytecode는 제이브이엠(JVM)이라는 Java 용 가상머신에서 읽을 수 있...

Android Room database embedded and relation

이미지
사용 언어: Kotlin 2.3.0 사용 버전: Android Studio Otter 2 Feature Drop | 2025.2.2 안드로이드 Room database embedded and relation을 알아보겠습니다. Room에서는 임베디드(Embedded)와 릴레이션(Relation)이라는 에너테이션(Annotation)을 제공해 줍니다. 해당 코드는 여기에 있습니다. https://github.com/android/nowinandroid/blob/main/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt 먼저 @Embedded 먼저 살펴봅시다. Embedded에 대한 문서는 아래에 있습니다. https://developer.android.com/reference/androidx/room/Embedded 처음 사진에 있는 코드를 보면 NewsResourceEntity라는 것을 Embedded 합니다. 이 의미는 Sqlite로 매핑(mapping) 할 때 NewsResourceEntity의 필드(Field) 값을 PopulatedNewsResource의 Field에도 동일하게 사용하겠다는 뜻입니다. 그러면 PopulatedNewsResource의 Field는 id, title, content, url, header_image_url, publish_date, type, topics로 구성되겠네요. 다음으로 볼 것은 @Relation입니다. Relation 문서는 여기 있습니다. https://developer.android.com/reference/androidx/room/Relation parentColumn에 들어간 "id"는 PopulatedNewsResource에 있는 id를 사용하겠다는 말입니다. entityColumn에 들어간 "id"는 TopicEntity에...