일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 힐트
- 안드로이드 커스텀 뷰
- viewmodel
- Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException
- Sticky Header RecyclerView
- BOJ
- 코루틴 공식 문서
- android compose orbit
- Android Compose Navigation
- android orbit
- 안드로이드 무한 스크롤
- Kotlin Serialization
- power menu
- AAC ViewModel
- 백준
- RecyclerView Sticky Header
- 코루틴
- 코루틴 공식문서
- hilt
- Coroutine
- runCatching
- 스레드 vs 코루틴
- Android Custom View
- Hilt 에러
- power menu 라이브러리
- Android Compose
- 안드로이드 컴포즈
- 코틀린 에러 핸들링
- 백준 2615
- Thread vs Coroutine
- Today
- Total
목록전체 글 (59)
Beeeam
Custom View 개발자가 맞춤 설계한 뷰를 의미한다. 안드로이드에서 기본으로 제공하는 View들로 원하는 것을 구현할 수 없는 경우, 비슷한 형태의 뷰를 반복적으로 사용해야 하는 경우에 사용한다. 한 가지 예를 들어보자 두 개의 뷰가 있다. 둘은 겉 보기엔 같아보이지만 속의 구성을 보면 다른 것을 확인할 수 있다. 위의 뷰는 단일 뷰이지만 밑의 뷰는 겉을 감싸는 CardView, 이미지를 담는 ImageView, 텍스트를 가지고 있는 TextView로 구성이 되어있다. 근데 어떤 것을 사용하는 게 맞다고 정해져 있는 것은 없다. 그럼 밑의 코드를 보자 3개의 뷰로 구성된 두 번째 뷰보다 단일 뷰인 첫 번째 뷰의 코드가 더 적고, 덜 복잡한 것을 확인할 수 있다. 이것 말고도 다른 장점들도 존재하는데..

Clean Architecture 계층을 분리하여 코드 간의 관심사를 분리하는 프로그램 구조이다. 위와 같이 4개의 계층으로 분리된다. Frameworks & Drivers: DB, 프레임워크, 웹, UI, HTTP 등으로 구성되는 계층이다. 가장 바깥에 위치하는 계층이다. Interface Adapter: 어댑터들로 구성된다. 데이터를 UseCase, Entity에서 사용하기 편한 형식으로 변환한다. 순수한 비즈니스 로직만 담당하는 역할을 한다. UseCase: 어플리케이션에 특화된 업무 규칙, Entity로 들어가고, 나가는 데이터의 흐름을 조정한다. Entity: 핵심 업무 규칙 모든 플랫폼 어플리케이션에서 재사용 가능해야 한다. 클린 아키텍처에서 의존성의 흐름은 중요하다. 바깥 원에서 안쪽 원으로..

동기 vs 비동기 동기: 어떤 작업을 진행할 때 한 요청에 대한 응답이 올 때까지 기다린 후 다음 요청을 처리하는 것 비동기: 어떤 작업을 진행할 때 한 요청에 대한 응답이 올 때까지 기다리지 않고 다른 요청들을 처리하는 것 동시성 vs 병렬성 둘 다 여러 개의 작업을 처리할 때 사용하는 기법이다. 하지만 처리하는 방법이 다르다. (당연한 얘기) 동시성 (Concurrency) 여러 작업을 동시에 처리하는 것 처럼 보이게 하는 방법이다. 이는 시분할 기법을 활용하여 여러 작업을 조금씩 나눠서 번갈아가며 실행하는 것이다. Context switching은 한 작업을 처리하다가 다른 작업을 처리하기 위해 변경하는 작업을 말한다. 병렬성 (Parallelism) 진짜 동시에 여러 작업을 처리하는 것이다. 이 ..
졸작하는데 카메라를 연동 해야하는 작업이 생겨서 카메라를 연동하는 작업을 해봤다. 먼저 카메라를 사용하려면 카메라 권한부터 설정 해야한다. AndroidManifest.xml 메니페스트에 위의 코드를 추가하여 카메라와 저장소 권한을 설정한다. const val REQUEST_IMAGE_IMAGE_CAPTURE = 1 ... // 카메라 실행 private fun openCamera() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException)..
새로운 프로젝트를 생성할 때 마다 타이틀 바를 제거하였는데 이때 마다 구글링 했었다. 매번 구글링 하기 귀찮으니 이번에 블로그에 올려 놔야 겠다는 생각을 해서 작성한다. 진짜 별거 없이 엄청 간단한 작업이다. res -> values -> themes.xml 파일에 밑의 코드를 추가하면 끝난다. 기본적으로 위와 같이 설정이 되어있는데 맨 밑에 코드 한 줄 추가 해주면 끝난다. (style 태그 안의 맨 밑) true 이러면 타이틀 바가 제거된다!

https://kotlinlang.org/docs/flow.html Asynchronous Flow | Kotlin kotlinlang.org Buffering 오래 걸리는 비동기 작업이 관련된 플로우의 경우 해당 플로우의 로직을 다른 코루틴에서 실행하는 것이 플로우 수집에 걸리는 전체 시간의 관점에서 도움이 된다. 예를 들어 방출하는데 100ms가 걸리고 플로우의 각 요소를 수집하는데 300ms씩 걸린다고 하자 fun simple(): Flow = flow { for (i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { val time = measureTimeMillis { simple().collect { value -> delay(300)..

https://kotlinlang.org/docs/flow.html Asynchronous Flow | Kotlin kotlinlang.org suspend 함수는 한 개의 값을 비동기적으로 실행하면서 반환한다. 그러면 여러 개의 값을 반환하려면 어떻게 해야 할까? 이 때 코루틴 플로우(Coroutine flow)를 사용하면 여러 개의 값을 반환할 수 있다. Representing multiple values 코틀린에서는 컬렉션을 사용하여 다수의 값을 나타낼 수 있다. 3개의 숫자를 요소로 갖는 리스트를 반환하는 함수를 main 함수에서 forEach 함수를 사용하여 이 리스트의 모든 값들을 출력할 수 있다. fun simple(): List = listOf(1, 2, 3) fun main() { sim..
Hilt Hilt는 안드로이드에서 의존성 주입을 도와주는 라이브러리이다. Hilt는 프로젝트의 모든 클래스에 컨테이너를 제공하고, 수명 주기를 자동으로 관리해준다. Hilt는 기존에 사용되던 Dagger 라이브러리를 기반으로 만들어졌다. Dagger보다 쉬워서 러닝 커브가 낮고, 초기 DI 환경 구축 비용을 절감할 수 있는 장점이 있다. 이전 게시물에서 언급했던 내용이다. 이번에는 더 자세히 알아보자 Hilt 사용 Project level의 gradle에 밑의 내용 추가 buildscript { ... dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44' } } App-level의 gradle에 밑의 내용 추가 plugi..