일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP
- 백준
- Algorithm
- CoordinatorLayout
- LiveData
- Navigation
- room
- onLayout
- activity
- recyclerview
- 알림
- onMeasure
- CustomView
- kotlin
- notification
- hilt
- Android
- 안드로이드
- sqlite
- BOJ
- CollapsingToolbarLayout
- ViewModel
- View
- 알고리즘
- lifecycle
- DataBinding
- Coroutine
- AppBarLayout
- 코틀린
- Behavior
- Today
- Total
목록코틀린 (38)
개발일지
https://programmers.co.kr/learn/courses/30/lessons/68937 코딩테스트 연습 - 트리 트리오 중간값 5 [[1,5],[2,5],[3,5],[4,5]] 2 programmers.co.kr 접근 1. 트리의 지름을 구할 수 있는 임의의 정점을 찾고 해당 정점과 다른 정점들 사이의 거리 중 2번째로 큰 값을 반환했다. => 12번 테스트 케이스에서 오답. 1번의 반례 위와 같은 그래프는 A-B를 통해 트리의 지금을 구할 수 있다. 해당 경우 A와 다른 정점들 사이의 거리 중 2번째로 큰 값을 반환한 값보다 (A, B, C)의 중간값이 더 크다. => 트리의 지름을 d라고 할 때 정점들 사이의 거리 중 d가 2개 이상 나올 수 있는 경우를 놓쳤기 때문에 1번 풀이법은 옳..
Flow Flow는 Coroutine에서 여러 값을 순차적으로 보내는 유형입니다. Jetpack에서도 많이 쓰이는 유형이고, Iterator와 비슷하며 map, filter등 람다 함수를 지원하면서 suspend 함수에서 쓰이기 때문에 비동기 처리에 효율적입니다. Flow 구성 Producer : Flow Builder에서 비동기적으로 데이터를 생산한다. Intermediary : Stream에서 보내는 데이터를 소비하지 않고 수정한다. Consumer : 값을 사용한다. Producer Flow Builder를 통해 만든다. flow, channelFlow등 다양한 함수가 존재한다. Builder를 통해 Data를 만들고 emit을 통해 Data를 전달한다. Consume하는 함수가 수행될 때마다 Fl..
HTTP (Hypertext Transfer Protocol) 웹 브라우저와 웹 서버 간의 통신을 하기 위한 규약이다. 특징 HTTP는 서버/클라이언트 모델을 따른다. 비연결 지향 클라이언트가 Request를 보내면, 서버는 클라이언트의 요청에 맞는 Response를 보내고 연결을 끊는다. 연결이 끊어지면 서로의 정보를 유지하기 때문에 정보를 잃는다. => 쿠키와 세션으로 해결가능 지속적으로 연결되는 형태가 아니기 때문에 불특정 다수를 대상으로 서비스하기 좋고, 많은 요청을 처리할 수 있다. HTTP Request Message Start Line : HTTP 시작부분 HTTP Method Request Target(목표 주소) HTTP Version HTTP Header Host : Host URL A..
drop N개의 숫자만큼 앞에서부터 버리고 나머지를 리턴한다. fun main() { val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val drop = list.drop(5) println(list) println(drop) } [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [6, 7, 8, 9, 10] dropLast N개의 숫자만큼 뒤에서부터 버리고 나머지를 리턴한다. fun main() { val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val drop = list.dropLast(5) println(list) println(drop) } [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, ..
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..
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 { } ->..