Kotlin

Android

Android add library using toml

toml 파일을 사용하게 된 계기이번 신규 프로젝트를 진행하게 되었는데,그에 따라 프로젝트 자체를 새로 생성하면서 build.gradle 언어를 Kotlin DSL로 설정했더니Android Studio Koala를 쓰는 나에게 toml이 포함된 프로젝트가 생성되었다. 여기저기 오픈소스 라이브러리에서 혹은 developer 사이트에서도 자주 볼 수 있는 녀석이라이번 기회에 써보기로 했다. Retrofit 추가해보기어차피 대부분 앱은 네트워크 작업이 필요하고 그에 따라 가장 대중적인 라이브러리는 단연 Retrofit일 것이다. 하지만, 기존 toml을 사용해본적 없는 나로서는 상당히 검색할 시간이 필요했다. 먼저 toml 파일 수정하기[versions]... //retrofit = "2.11.0"serial..

Android

Android QR Code Generation

기능 추가 배경QR코드를 통해 로그인 정보를 공유한다. 물론 로그인 정보는 민감한 정보이므로 암호화가 필요하다. 장점서버가 필요없다.OS간 직접 파일을 옮기는 것이 아니기에 플랫폼 제약이 없다. 단점길이에 제한이 있다.카메라만으로도 정보가 보일 수 있어 비교적 보안에 약한 편이다.(암호화를 한다고 해도 말이다.) 라이브러리 추가하기여기서 사용한 라이브러리는 이전 글에서도 등장한 적이 있다.https://github.com/journeyapps/zxing-android-embedded GitHub - journeyapps/zxing-android-embedded: Barcode scanner library for Android, based on the ZXing decoderBarcode scanner l..

Android

Android Watchdog 기능 추가하기(OS 9)

이번 글은 기능에 대해 소개하기 전, 먼저 OS 9(Pie)을 타겟으로 만든 기능임을 알린다. 기능 및 배경 소개우리가 어떤 프로그램이 지속 실행되어야하는 상황에 만약을 대비해 넣는 기능 중에 하나가한번쯤은 봤을만한 꺼지면 재실행하는 기능이다. 이 기능은 보통 Watchdog(와치독, 워치독)이라 불린다. 이번에 안드로이드 셋톱박스에 맞추어 앱을 제작하게 됐는데이 때, 꺼지지 않는 앱이 필요했고 만에 하나를 대비해 이 기능을 준비하게 되었다. Manifest 수정하기먼저 Foreground Service 권한을 설정해야 한다. 갑자기 무슨 Foreground Service인가 싶을 수 있다. Background Service에서 Activity를 실행할 수는 있지만(하위 OS이기에 가능하지만)OS에서 S..

Language/Kotlin

Coroutines 여러 개로 연산 속도 높이기

이번 글에서는 전에 다루었던 withContext로 스레드를 전환 후 연산 작업을 더 빠르게 수행해보려고 한다. 기존에는 팩토리얼 계산을 Default Dispatcher를 사용해 하나의 코루틴에서 연산을 수행했다.이번에는 여러 개의 코루틴에서 연산을 수행한다. 어떤 구조로 실행할까팩토리얼을 몇개의 코루틴으로 나눠 실행할지 정해야 한다.실행할 코루틴 갯수만큼 연산할 숫자의 길이를 동등하게 분배한다.작은 범위를 계산하는 서브 코루틴을 동시에 실행시킨다.모든 서브 코루틴이 종료되는 것을 기다린다.모든 서브 코루틴이 종료되면 fold 함수를 사용해 작은 범위들을 모두 곱한다. 코드suspend fun calculateFactorial( factorialOf: Int, numberOfC..

Android

Android Compose WebView PullToRefresh 기능 구현하기

제목에서 본 기능은 갤럭시 유저라면 삼성 브라우저를 통해 익숙한 기능일 것이다. 다만, 이 기능을 앱의 웹뷰에서 적용해야하는지는 기획에 따라 달라지겠지만나는 이번에 Compose 공부도 하는 겸 추가해보았다. 본격적으로 글을 시작하기 전 내가 Compose에 대한 이해가 상당히 미진하다는 점을 알린다. Material3 라이브러리 버전먼저 나는 이번 프로젝트에서 compose material3 라이브러리 최신 버전인 1.3.1을 사용했다. pullToRefresh가 1.3.0 버전에서 추가되었기 때문이다. 제목에 굳이 웹뷰를 적은 이유보통 android compose pulltorefresh를 검색어로 입력하면LazyColumn에 있는 리스트를 갱신하는 예제가 매우 많다. 하지만, 나는 전체화면인 웹뷰 ..

Language/Kotlin

Java, Kotlin Interoperability 해결하기

이번 글은 최근 Java -> Kotlin 변환과Java 클래스에서 Kotlin 클래스를 사용하면서 겪은 이슈를 공유해본다. 문제 상황 설명먼저 Java 클래스를 Kotlin 클래스로 변경했다. 이 때 특정 변수는 자료형을 변경하면서까지 리팩토링을 진행했다. 그리고 다시 변경한 Kotlin 클래스를 Java 클래스에서 사용하는 부분이 필요했다.(아래처럼 말이다)class SomeData { var a: UInt = 0 var b: Int = 0}public class User { public void someMethod() { SomeData someData = new SomeData(); someData.getB(); someData.getA(); }} Kot..

프로그래머스

[PCCP 기출문제] 1번 / 동영상 재생기 코틀린(Kotlin)

이번 문제는 설명을 쭉 읽어보니 해볼만 하겠다 싶은 문제여서 도전해봤는데약간씩 헤매는 과정을 거쳤다. 문제일단 배열을 제외하고 영상 시간을 정수로, 다시 정수에서 문자열로 변환하는 기능이 필요했다. 그래서 Kotlin에 있는 Extension function으로 만들어보기로 했다. 나머지 로직은 풀이와 같이 보자. 풀이먼저 getTimeInt 함수를 보자.간단히 문자열을 ":" 기준으로 쪼갠 후분 단위는 60을 곱하고 초 단위는 그냥 더해서 정수를 리턴해주는 함수이다. 이번에는 getTimeString 함수이다.특이점은 한자릿수의 경우 앞에 0으로 채워주는 것이 특징이므로String.format 함수를 사용해 포맷을 지정해주고 정수를 60으로 나눈 몫과 나머지를 각각 할당해주었다. 이제 실행되는 함수를 ..

프로그래머스

배열 조각하기 코틀린(Kotlin)

이번 문제는 배열 자르기를 연습하는 시간이 되었다. 물론 실제로 배열 자체를 잘랐다기보다는 리스트로 변형해서 잘랐지만 말이다. 문제홀짝 케이스마다 인덱스를 맞춰 잘라주면 되는 문제이다. 다만, 배열을 리스트로 변환한 뒤 subList를 사용할텐데 인덱스를 어떻게 주어야할지 고민이 필요한 문제이다. 풀이먼저 자르는 횟수는 query배열 길이만큼이기때문에 query에 forEachIndexed를 사용해주었다. subList를 활용하면 문제를 다르게 읽어야 할 필요가 있다. 먼저 짝수일 때는 query값을 포함하여 앞의 값을 남겨야 한다. 여기서 두번째 파라미터에 query배열 값 그대로를 넣게 되면해당 숫자까지 같이 잘리기 때문에 1을 더해주었다. 홀수일 때는 query값을 포함하여 뒤의 값을 남겨야 한다...

프로그래머스

전국 대회 선발 고사 코틀린(Kotlin)

이번 문제는 지나가다 정답률이 낮은 문제를 발견해 풀어보았다. 이전과는 다르게 두 가지 방식으로 문제를 풀어보았는데여러 자료형을 오가면서 풀어볼 수 있어서 나름 좋은 문제였다고 생각한다. 문제풀이 1. map -> list 변환가장 처음 생각한 방식이다. rank배열의 값과 인덱스가 모두 필요한 상황이었기 때문에 list만으로는 풀 수가 없다는 판단을 내렸다. 그래서 key, value로 저장할 수 있는 map을 선택했다. 이 때, rank배열의 각 값으로 key를 해당 index로 value를 지정했다. 그래야 참석 여부에 따라 map에 저장한 key로 정렬할 수 있기 때문이다. 정렬 이후에는 다시 리스트로 변환하여 가장 앞에서부터 3개의 값을 꺼내 값을 만들어 리턴해주었다. 풀이 2. list로 풀기..

프로그래머스

왼쪽 오른쪽 코틀린(Kotlin)

오늘 풀어본 문제는 코틀린에서 forEach를 사용해보고,여기서 continue와 break 역할을 어떻게 대체하면 좋을지 다시 복습해보는 과정이었다. 문제문제는 l과 r이 나오는 시점에서 배열을 좌우로 자르면 되는 문제이다. 다만 위에서 잠시 언급했듯 break와 continue를 사용해야하는 이유가 문제에 있다. 배열을 좌우로 자르는 시점에서는 break가,그렇지 않은 경우에는 continue가 필요하다. 풀이 먼저 forEachIndexed를 사용해 반복문을 대체 해주었고,이 때 기존 Java처럼 continue, break는 사용할 수 없기에run scope 함수로 감싸주었다. 그리고 나서, continue가 필요한 지점은 forEachIndexed를 리턴해주었고break가 필요한 지점은 run ..

BonusTrack02.dev
'Kotlin' 태그의 글 목록