일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- View
- CustomView
- ViewModel
- Navigation
- HTTP
- room
- 코틀린
- 안드로이드
- DataBinding
- lifecycle
- notification
- 백준
- LiveData
- Coroutine
- Android
- kotlin
- BOJ
- 알고리즘
- Algorithm
- sqlite
- AppBarLayout
- 알림
- hilt
- onLayout
- recyclerview
- onMeasure
- activity
- CollapsingToolbarLayout
- CoordinatorLayout
- Behavior
- Today
- Total
목록코틀린 (38)
개발일지
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cmbOKa/btreo5Hc0T0/ZK3dIlvn5nvuqTdeDwdQg1/img.png)
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번 풀이법은 옳..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Z571s/btrbkVghBay/Wj1GPvl0snMMHcGXF08RGk/img.png)
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 { } ->..