2026/04/13

오늘의 이야기

Android에서 Koin, Room 데이터베이스, Nordic BLE 라이브러리를 사용한 UART 통신


 


BLE 통신을 이해해 보자



 


소개


이 블로그 포스트에서는 Android 애플리케이션에서 Koin을 사용한 종속성 주입, Room 데이터베이스를 사용한 데이터 관리, 그리고 Nordic Semiconductor의 no.nordicsemi.android:ble 라이브러리를 사용한 BLE 연결 및 UART 통신을 설정하는 방법을 다룹니다.


1. Koin을 사용한 종속성 주입


Koin은 Android 애플리케이션에서 종속성 주입을 간편하게 설정할 수 있는 라이브러리입니다. 먼저, build.gradle 파일에 Koin 종속성을 추가합니다:



dependencies {
implementation "io.insert-koin:koin-android:3.1.2"
}


Koin 모듈을 설정하여 종속성을 주입합니다:


Kotlin
 



val appModule = module {
single { Room.databaseBuilder(get(), AppDatabase::class.java, "device-database").build() }
single { get<AppDatabase>().deviceDao() }
single<DeviceRepository> { DeviceRepositoryImpl(get()) }
viewModel { DeviceViewModel(get()) }
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

Application 클래스에서 Koin을 시작합니다:


Kotlin
 



class MyApp : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MyApp)
modules(appModule)
}
}
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

2. Room 데이터베이스 설정


Room 데이터베이스를 사용하여 데이터를 관리합니다. 먼저, build.gradle 파일에 Room 종속성을 추가합니다:



dependencies {
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
}


데이터베이스 엔티티와 DAO를 정의합니다:


Kotlin
 



@Entity(tableName = "devices")
data class Device(
@PrimaryKey(autoGenerate = true) val id: Int,
@ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "address") val address: String
)

@Dao
interface DeviceDao {
@Query("SELECT * FROM devices")
fun getAllDevices(): LiveData<List<Device>>

@Insert
suspend fun insertDevice(device: Device)
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

Room 데이터베이스를 정의합니다:


Kotlin
 



@Database(entities = [Device::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun deviceDao(): DeviceDao
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

3. Repository 및 ViewModel 설정


Repository와 ViewModel을 정의하여 데이터 소스와 상호작용합니다:


Kotlin
 



class DeviceRepositoryImpl(private val deviceDao: DeviceDao) : DeviceRepository {
override fun getAllDevices(): LiveData<List<Device>> = deviceDao.getAllDevices()

override suspend fun insertDevice(device: Device) {
withContext(Dispatchers.IO) {
deviceDao.insertDevice(device)
}
}
}

class DeviceViewModel(private val repository: DeviceRepository) : ViewModel() {
val devices: LiveData<List<Device>> = repository.getAllDevices()

fun addDevice(device: Device) {
viewModelScope.launch {
repository.insertDevice(device)
}
}
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

4. Nordic BLE 라이브러리를 사용한 BLE 연결


Nordic Semiconductor의 no.nordicsemi.android:ble 라이브러리를 사용하여 BLE 연결을 설정하고 해제하는 방법을 설명합니다.


BLE 연결 설정


Kotlin
 



class MyBleManager(context: Context) : BleManager(context) {
// 초기화 및 설정 코드
}

val bleManager = MyBleManager(context)
bleManager.connect(device)
.retry(3, 100)
.useAutoConnect(false)
.enqueue()


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

BLE 연결 해제 및 리소스 정리


Kotlin
 



override fun onDestroy() {
super.onDestroy()
bleManager.disconnect().enqueue()
bleManager.close()
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

BroadcastReceiver 해제


Kotlin
 



override fun onDestroy() {
super.onDestroy()
unregisterReceiver(bleReceiver)
}


AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

결론


이 블로그 포스트에서는 Koin을 사용한 종속성 주입, Room 데이터베이스를 사용한 데이터 관리, 그리고 Nordic Semiconductor의 no.nordicsemi.android:ble 라이브러리를 사용한 BLE 연결 및 UART 통신을 설정하는 방법을 설명했습니다. BLE 연결을 안전하게 관리하고 메모리 누수 문제를 방지하기 위해 적절한 리소스 해제 방법을 사용하는 것이 중요합니다.


추가적인 정보는 Nordic Semiconductor의 공식 문서와 Android Developers 공식 문서에서 확인할 수 있습니다.




이 포스트가 도움이 되길 바랍니다! 추가적인 질문이 있으면 언제든지 물어보세요. 😊





댓글 없음:

댓글 쓰기

오늘의 이야기

#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase 🎯 야 너 토요일마다 로또 확인하냐? 나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ 근데 이제는 그냥 안 해 AI한테 맡겼어 🤖✨ 그것도 구글 Gemini로다가! ...