2026의 게시물 표시

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에...