somoly.tistory.com
Kotlin Coroutine 개념
Kotlin 2023. 10. 5. 15:03

Kotlin Coroutine 개념 예시 suspend fun fetchDocs() { // Dispatchers.Main val result = get("https://developer.android.com") // Dispatchers.IO for `get` show(result) // Dispatchers.Main } suspend fun get(url: String) = withContext(Dispatchers.IO) { /* ... */ } 예시에서 get() 은 기본 스레드에서 실행되지만 네트워크 요청을 시작하기 전 Coroutine 을 정지(suspend)합니다. 네트워크 요청이 완료되면 get() 은 callback 을 사용하여 기본 스레드에 알리는 대신 정지(spspend)된 Corou..

kotlin euc-kr to utf-8 conversion
Kotlin 2023. 9. 9. 21:57

euc-kr 로 된 자막파일을 utf-8 로 변환하기 위해 사용한 것 import java.nio.charset.Charset import java.nio.file.Files import kotlin.io.path.Path import kotlin.io.path.extension import kotlin.io.path.readBytes fun main() { // 해당 경로의 파일 목록을 가져오기 val stream = Files.list(Path("path/files")) // smi 파일들만 필터링 stream.filter { it.extension == "smi" } .forEach { // 파일을 byte array 로 변환 val bytes = it.readBytes() // string 으로 ..

Apache POI sheet.autoSizeColumn() Speed Up
Kotlin 2023. 8. 8. 09:01

문제 Ajax 를 이용하여 300건 정도의 데이터를 Apache POI 를 이용하여 엑셀 파일 생성 중 Ajax timeout 을 10초로 해 두었는데 timeout 이 발생하여 원인을 확인한 결과 sheet.autoSizeColumn() 함수 처리에 시간이 오래 걸리는 현상을 발견 해결방법 row 마다 컬럼의 문자열 길이를 이용하여 너비를 가중치를 이용하여 늘려주는 방식 문자열 길이 최대 70 까지만 적용되도록 함 ( 문자열 길이가 너무 길어지면 너비가 너무 커짐 방지 ) fun setColumnSize(sheet: XSSFSheet, index: Int, value: String) { val defaultColumnWidth = 2048 val maxLength = 70 val characterWid..

kotlin logger
Kotlin 2023. 6. 26. 23:01

kotlin 에서 slf4j logger 를 이용할 경우 불편한 점이 있어 LoggerDelegate 를 이용하여 사용하는 전략을 사용하고 있습니다. class LoggerDelegate : ReadOnlyProperty { private lateinit var logger: Logger override fun getValue(thisRef: Any, property: KProperty): Logger { if (!::logger.isInitialized) { logger = LoggerFactory.getLogger(thisRef.javaClass.name.substringBefore("\$Companion")) } return logger } } val loggerK: ReadOnlyProperty ..

Kotlin Collections overview
Kotlin 2023. 3. 26. 15:28

Collection vs. Mutable Collection 먼저 Kotlin의 다양한 컬렉션 유형에 대해 살펴보겠습니다. 기본 컬렉션 유형을 초기화하는 방법을 살펴보겠습니다. 컬렉션 인터페이스는 읽기 전용 메서드를 지원하는 반면 MutableCollection은 읽기/쓰기 메서드를 지원합니다. List listOf() 메서드를 사용하여 간단한 읽기 전용 List를 생성하고 mutableListOf() 메서드를 사용하여 읽기-쓰기 MutableList를 생성할 수 있습니다: val theList = listOf("one", "two", "three") val theMutableList = mutableListOf("one", "two", "three") Set 마찬가지로 setOf() 메서드를 사용하여 ..