목록전체 글 (16)
Shunz Android Dev Note
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfCEtw/btsDRcoPhyy/UbfbAiY8xUYAlKxJA2ruBK/img.png)
코틀린에서 boolean 연산을 수행하는 두 가지 방법은 연산자인 && 와 || 또는 infix 함수를 사용하는 것입니다. 이들은 대부분 동일하지만 한 가지 중요한 차이점이 있습니다. 연산자들은 short circuiting을 수행하지만 infix 함수는 그렇지 않습니다. short circuiting란? 결과가 왼쪽 피연산자로부터 이미 결정된 경우 (예: 왼쪽 피연산자가 || 에 대하여 true이고 &&에 대하여 false) 오른쪽 boolean 피연산자가 수행되지 않는 최적화입니다. 다음 예를 참조하시면 좀 더 이해가 쉬울 것입니다. fun isTrue(): Boolean { println("이 함수는 true") return true } fun isFalse(): Boolean { println("..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/chtUtn/btsC7mqThAv/uajSlTClBkqjE0H6a8x0c1/img.png)
이번 시간에는 네트워크 연결 상태를 실시간으로 옵저빙 할 수 있는 방법에 대하여 포스팅을 해 보겠습니다. Compose 기반으로 작성되었지만, Compose가 아닌 기존의 UI 개발 방식(명령형)에서도 사용을 할 수 있습니다. 솔루션1 ConnectivityObserver 라는 인터페이스를 생성합니다. 네트워크 연결 상태를 실시간 받기 위하여 Flow 형태로 응답을 받도록 메서드를 하나 선언합니다. 상태는 총 4가지를 가지고 있습니다. interface ConnectivityObserver { fun getFlow(): Flow enum class Status { Available, Unavailable, Losing, Lost } } 인터페이스를 구현한 구체 클래스를 생성합니다. getFlow()의 내..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqN7Tn/btsCTBIaMm7/p2JblaPZeJtb5r8Erbbz6K/img.png)
컴포즈에서 Stable 하다는 개념은 매우 중요합니다. 그 이유중 하나는 Smart Recomposition 때문입니다. 이는 리컴포지션을 진행할 때, 모든 입력값이 Stable이고 같은 값이라면 스킵하게 된다는 것을 의미합니다. 즉, 바뀐게 없으면 화면을 다시 그리지 않겠다는 의미로 UI 렌더링을 조금 더 효율적으로 하겠다는걸 나타냅니다. 하지만, 값이 바뀌지 않았다는 확신이 없다면 무조건 재구성(재렌더링)을 진행하게 됩니다. Stable, Unstable 이란? 컴포즈는 타입을 stable, unstable로 구분을 합니다. 타입이 immutable이면 stable하다는 것을 의미하는데 이는 리컴포즈할때 컴포즈가 값이 변경 되었는지를 알아챌 수 있다는 것입니다. 반면, 타입이 unstable 하다는 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bp5tD7/btsCxHQ2L4A/n1gzVeo3ckBZXljlH5bplk/img.png)
Jetpack Compose는 안드로이드에서 UI 개발을 훨씬 더 용이하게 만들어주었지만, 더 나은 성능을 위해 UI 효과를 제대로 관리하는 방법을 이해하는 것은 여전히 중요합니다. 이 포스트에서는, UI 효과를 효과적으로 관리하는 데 도움이 되는 세 가지 중요한 컴포저블 함수인 SideEffect, LaunchedEffect, DisposableEffect에 대해 알아보겠습니다. 왜 Side-effects(이하 부수효과) 인가? Jetpack Compose에서 부수효과의 목적은 제어되고 예측 가능한 방식으로 컴포저블 함수 밖에서 앱의 상태를 변경하는 non-UI 관련 작업을 실행할 수 있도록 하는 것입니다. 데이터베이스를 업데이트하거나 네트워크 요청을 하는 등의 부수효과는 UI 렌더링 로직과 별도로 유..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yzP1n/btsB6lf9F0R/2S7zWWkHS2JYfpMuVhNUNk/img.png)
이 포스트에서는 inline 함수란 무엇이며 어떤 문제점을 해결하는지에 대해 자세히 설명해 보려고 합니다. 또한 언제 inline 함수를 사용하는 것이 적절하고 언제 피해야 하는지에 대해 몇 가지 실제적인 예와 팁도 공유 하겠습니다. 먼저 인라인 함수가 어떤 역할을 하는지 알아보겠습니다. 일반적인 아이디어는 간단합니다. 어떤 함수에 인라인 키워드를 붙이면 컴파일러는 그 함수의 본문을 복사하여 모든 호출 위치에 붙여넣을 것입니다. 아래의 코드가, inline fun foo() { print("인라인 함수!") } fun main() { foo() } 컴파일을 하면 최종적으로 다음과 동일한 수준이 됩니다. inline fun foo() { print("인라인 함수!") } fun main() { print(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cgJLwY/btsBCnsvjrq/VWP48kz1saIn5DCw77jPB0/img.png)
이 포스팅은 아래 게시글을 번역 및 일부 수정하여 작성하였습니다. https://medium.com/androiddevelopers/exceptions-in-coroutines-ce8da1ec060c 개발자인 우리는 보통 앱이 만족스러울만큼 잘 동작하게 만들기 위하여 많은 시간을 소비합니다. 그러나 예상대로 일이 진행되지 않을 때마다 적절한 사용자 경험을 제공하는 것도 마찬가지로 중요합니다. 한편으로, 앱이 크래쉬가 발생한는것을 보는 것은 사용자에게 좋지 않은 경험이며, 다른 한편으론 어떤 행동이 성공하지 못했을 때 사용자에게 올바른 메시지를 보여주는 것은 필수적입니다. Exception을 적절하게 처리하는 것은 사용자가 앱을 어떻게 인식하는지에 큰 영향을 미칩니다. 이 포스팅에서는 코루틴에서 어떻게 E..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/raWcb/btsBq3e2WVt/kC23LP8yGZNMY29Foub8z1/img.png)
이 포스팅은 아래 게시글을 번역 및 일부 수정하여 작성하였습니다. https://medium.com/androiddevelopers/cancellation-in-coroutines-aa6b90163629 인생에서와 마찬가지로, 우리는 개발에 있어서도 필요 이상의 일을 하는 것을 피하는 것이 중요하다는 것을 알고 있습니다. 이 원리는 코루틴에도 적용이 됩니다. 독자는 코루틴의 수명을 조절하고 더 이상 필요하지 않을 때 그것을 취소해야 합니다. 이것이 구조화된 동시성을 나타내는 것입니다. 코루틴 취소의 안팎에 대해 알아보려면 계속 읽어보세요. 만약 이 내용에 관하여 설명하는 Video를 보고 싶다면 아래 영상을 참고하세요. KotlinConf`19 에서 코루틴의 예외와 취소에 대하여 발표한 영상입니다. ht..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b21hTI/btsBrfmckpc/43d5aDltG4SKu7T68a5JV1/img.png)
이 포스팅은 아래 게시글을 번역 및 일부 수정하여 작성하였습니다. https://medium.com/androiddevelopers/coroutines-first-things-first-e6187bf3bb21 이 일련의 포스팅은 코루틴의 취소와 예외에 대하여 자세히 설명합니다. 취소 작업은 메모리와 베터리 수명을 낭비 할 수 있는 필요 이상의 작업을 하지 않도록 하는데 중요합니다. 적절한 예외 처리는 훌륭한 사용자 경험을 제공하는데 핵심 요소입니다. 본 포스팅은 이어서 작성할 다른 두 포스팅(2부 : 취소, 3부 : 예외)의 기초에 관하여 설명을 합니다. 예를 들어 CoroutineScope, Job 그리고 CoroutineContext입니다. 만약 영상을 보는것을 더 선호한다면 KotlinConf'19..