목록전체 글 (140)
시배's Android
Jetpack Compose 단계 | Android Developers Jetpack Compose 단계 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 대부분의 다른 UI 도구 키트와 마찬가지로 Compose는 몇 가지 고유한 단계를 통해 프레임을 렌 developer.android.com The three phases of a frame Composition : 어떤 UI를 표시할지 결정합니다. Compose는 구성 가능한 함수를 실행하고 UI의 설명을 생성합니다. Layout : UI를 어디에 배치할지 결정합니다. 이 단계는 측정(measurement)과 배치(placement) 두 단계로 구성됩니다. 레이아웃 요소는 2D 좌표로 자신과 모든 하위 요소를 측정하고 배치..
Orbit + Compose + Pokedex API Android 앱 개발에서 최신 기술인 Orbit와 Compose를 활용하여 Pokedex API를 사용하여 국룰 Pokedex 앱을 구현해보겠습니다. Pokedex GitHub - koreatlwls/Orbit-MVI-Compose-Pokedex: Orbit-MVI-Compose-Pokedex Orbit-MVI-Compose-Pokedex. Contribute to koreatlwls/Orbit-MVI-Compose-Pokedex development by creating an account on GitHub. github.com Paging3를 활용하여 Infinite Scroll을 구현하였습니다. Room과 Retrofit2를 활용하여 네트워크를..
State and effect use cases LaunchedEffect L run suspend functions in the scope of a composable LaunchedEffect가 구성에 진입하면 코드 블록과 함께 코루틴을 실행합니다. LaunchedEffect가 구성을 떠나면 해당 코루틴은 취소됩니다. LaunchedEffect가 다른 키와 함께 재구성되는 경우, 기존의 코루틴은 취소되고 새로운 suspend 함수가 새로운 코루틴에서 실행됩니다. @Composable fun MyScreen( state: UiState, snackbarHostState: SnackbarHostState ) { // If the UI state contains an error, show snackbar ..
Compose 수정자 | Jetpack Compose | Android Developers Compose 수정자 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 수정자를 사용하면 컴포저블을 장식하거나 강화할 수 있습니다. 수정자를 통해 다음과 같은 종 developer.android.com Compose modifiers modifiers는 구성 요소를 꾸미거나 보강하는 데 사용됩니다. modifiers를 사용하면 다음과 같은 작업을 수행할 수 있습니다: 구성 요소의 크기, 레이아웃, 동작 및 모양 변경 접근성 레이블과 같은 정보 추가 사용자 입력 처리 클릭 가능하게 만들거나 스크롤, 드래그, 확대/축소 등과 같은 상위 수준 상호작용 추가 modifiers는 표준 Kotli..
이 블로그 포스팅에서는 Coil을 이용하여 이미지를 로드하면서 배경색 추출을 위해 Palette를 조합하는 방법에 대해 알아보겠습니다. Coil은 이미지를 비트맵으로 쉽게 로드할 수 있도록 도와주며, Palette는 이미지에서 주요 색상 팔레트를 추출하는데 사용됩니다. object PaletteGenerator { suspend fun convertImageUrlToBitmap( imageUrl: String, context: Context ): Bitmap? { val loader = ImageLoader(context = context) val request = ImageRequest.Builder(context = context) .data(imageUrl) .allowHardware(false) ..
연속체 전달 스타일 호출되는 함수에 연속체를 보내는 것을 전제로 하고 있어, 함수가 완료되는 대로 연속체를 호출할 것이다. 모든 일시 중단 연산은 연속체를 보내고 받고록 변환하는데 이러한 대부분의 복잡한 작업은 컴파일러가 수행한다. 일시 중단 연산은 상태 머신으로 변환되는데, 상태를 저장하고 복구하며 한 번에 코드의 한 부분을 실행한다. 연속체 public interface Continuation { public val context : CoroutineContext public fun resume(value : T) public fun resumeWithException(exception : Throwable) } CoroutineContext는 Continuation과 사용된다. resume() 함수..
동시성 코드 테스트 테스트를 할 때 단순히 테스트를 하는 것이 아니라 정확하게 해야 한다는 점이 매우 중요하다. 가정을 버려야 한다. 나무가 아닌 숲에 집중하라 테스트에 대한 추가 조언 버그 수정은 시나리오를 커버하는 테스트와 함께 수반돼야 한다. 동시성 버그가 애플리케이션의 다른 부분에 어떤한 방법으로 영향을 줄 것인지 항상 생각해야 한다. 동시성 작업을 위해 모든 값을 차례로 하는 테스트를 하지 말아야 한다. 구현을 하기 전에 복원력에 대해서 이야기하고, 항상 복원력을 위한 테스트를 해야 한다. 에지 케이스를 찾기 위해서 커버리지 보고서에서 분기 분석을 사용한다. 단위 테스트와 기능 테스트를 작성하는 시점에 대해 알아야 한다. 인터페이스를 사용해 종속성을 연결한다.
원자성 위반 이 유형의 오류는 정확한 동기화 없이 객체의 상태를 동시에 수정할 때 발생한다. 원자성 위반은 코틀린에서도 발생할 수 있지만 오류를 피할 수 있도록 디자인하는 데 도움이 되는 기본형을 제공한다. 원자성의 의미 연산이 단일하고 분할할 수 없을 때 이 연산을 원자적이라고 한다. 공유 상태에 관해 언급할 때 흔히 많은 스레드에서 하나의 변수를 읽거나 쓰는 것에 대해 이야기한다. 보통 원자적이지 않아서 문제가 발생한다. 공유 상태를 수정하는 코드 블록이 다른 스레드의 변경 시도와 겹치면서 이런 문제가 발생한다. 한 스레드가 현재 값을 바꾸는 중에 아직 쓰지는 않은 상태에서 다른 스레드가 현재 값을 읽을 수 있다. 코드 블록을 원자적으로 만들려면 블록 안에서 발생하는 어떤 메모리 액세스도 동시에 실행..