일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- LiveData
- CustomView
- BOJ
- CollapsingToolbarLayout
- Algorithm
- 알림
- 백준
- kotlin
- Coroutine
- AppBarLayout
- DataBinding
- 알고리즘
- 안드로이드
- lifecycle
- 코틀린
- room
- onMeasure
- Behavior
- Android
- ViewModel
- CoordinatorLayout
- notification
- HTTP
- onLayout
- Navigation
- hilt
- recyclerview
- activity
- sqlite
- View
- Today
- Total
목록Programming (프로그래밍) (212)
개발일지
any() Collection에 하나라도 있으면 true => 만족하는 하나를 찾을때까지 검사한다. fun main() { val list0 = listOf() println(list0.any()) val list1 = listOf(1, 2, 3) println(list1.any()) val list2 = listOf(1, 2, 3, 1, 2, 3) list2.any { println(it) it == 3 } } false true 1 2 3 all() 모든 원소가 일치하면 true => 전부다 검사하거나, 중간에 일치하지 않는 원소가 있으면 끝난다. fun main() { val list0 = listOf() println(list0.all { it > 0 }) val list1 = listOf(1, ..
Mutable vs Immutable Mutable : 내부의 값을 변경할 수 있다. Immutable : 내부의 값을 변경할 수 없다. -> mutable로 선언하려면 앞에 mutable을 붙이면 된다. (생략할 시 immutable) fun main() { val immutableList = listOf(1, 2, 3) // ERROR // immutableList.add(1) // immutableList.set(0, -1) val mutableList = mutableListOf(1, 2, 3) mutableList.add(1) mutableList[0] = -1 println("Immutable : $immutableList") println("Mutable : $mutableList") } I..
Glide Android에서 Image를 빠르게 불러오기 위한 라이브러리다. 기본적으로 이미지, GIF를 불러올 수 있고, 에러처리, 디스크 캐쉬등 다양한 기능을 제공한다. Glide의 원칙은 어떠한 이미지도 빠르고 부드럽게 불러오는 것을 목표로 한다. Dependency ext { glide_version = "4.12.0" } dependencies { // Glide implementation "com.github.bumptech.glide:glide:$glide_version" annotationProcessor "com.github.bumptech.glide:compiler:$glide_version" } github.com/bumptech/glidebumptech.github.io/glide/..
Coroutine에 접근하기 위해서는 CoroutineScope를 사용해서 접근해야 한다. CoroutineScope는 interface형식으로 정의되어 있고, CoroutineContext를 사용해서 생성하거나, 미리 정의된 GlobalScope를 사용할 수 있다. GlobalScope GlobalScope는 별도의 생명주기가 없고, 실행되면 작업이 종료되거나 앱이 종료될 때까지 남아있는다. fun main() = runBlocking { GlobalScope.launch { println("Running on GlobalScope ${Thread.currentThread().name}") } delay(1000L) } Running on GlobalScope DefaultDispatcher-worke..
suspend함수는 순차적으로 실행되는게 기본이다. fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingOne() val two = doSomethingTwo() println("Result : ${one + two}") } println("Time : $time") } suspend fun doSomethingOne(): Int { delay(1000L) // 무거운 작업 return 10 // 결과 리턴 } suspend fun doSomethingTwo(): Int { delay(1000L) // 무거운 작업 return 20 // 결과 리턴 } Result : 30 Time : 2025 async 하지만 do..
개념 이분 그래프가 있을 때 A집합과 B집합을 최대한 매칭하는 경우 Alternating Path(교차 경로) 그래프 위의 경로 중 매칭되지 않은 정점부터 시작하여 매칭을 이어주고 있지 않은 간선과 이어주는 간선이 교차하면서 반복되는 경로 (X - O - X - O - X ....) (X : 연결안된 정점, O : 연결된 정점) Augmentine Path(증가 경로) 양 끝 정점이 매칭되어 있지 않은 교차경로 교차경로 안에서 증가경로를 반전하면 매칭의 크기를 늘릴 수 있다. 작동원리 1. A그룹에서 매칭에 속하지 않은 정점들의 레벨을 구한다. 2. 증가 경로를 체크한다. 3. 더 이상 증가경로를 찾지 못할 때까지 반복한다. 시간복잡도 O(V^(1/2) * E) 문제 9525 룩 배치하기 www.acmi..
cancel() Job을 취소시키는 함수, Job이 취소되었을 때 suspend 함수를 호출하면 JobCancellationException을 발생시킨다. fun main() = runBlocking { val job = launch { repeat(5) { try { delay(1000L) println("Job Run Index($it)") } catch (e: Exception) { e.printStackTrace() } } } delay(3000L) job.cancel() job.join() } Job Run Index(0) Job Run Index(1) kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; ..
코루틴 빌더 runBlocking { } -> 해당 코루틴이 끝날 때 까지 Blocking한다. fun main() { // delay(1000L)가 실행되는 동안 main함수가 끝나고 println을 만나지 못하고 종료 GlobalScope.launch { delay(1000L) println("Pass") } } Process finished with exit code 0 fun main() { GlobalScope.launch { delay(1000L) println("Pass") } runBlocking { // delay(2000L)이 끝날 때 까지 Blocking 된다. delay(2000L) } } Pass Process finished with exit code 0 launch { } ->..