전체 글

안드로이드, 코틀린, 컴포즈
코루틴이란?코루틴은 안드로이드에서 간단하게 비동기적으로 코드를 실행할 수 있는 동시성 디자인 패턴입니다.  동기와 비동기는 어떤 차이가 있을까요?? 동기 : 작업을 순차적으로 진행비동기: 순차적으로 작업을 진행하지 않고, 여러 작업을 동시에 진행하는 것. 코루틴 관련 개념들을 알아봅시다.코루틴 스코프 코루틴의 실행 범위를 정의하며, 코루틴의 생명 주기를 관리한다. 부모 자식 관계 구조에 따라서 스코프의 종료 및 취소가 전파된다. 코루틴은 스코프에 바인딩되며 부모 스코프가 종료나 취소가 된다면 자동으로 내부에 있는 모든 코루틴도 종료나 취소 처리가 된다. 코루틴 스코프 종류GlobalScope : 앱 생명주기와 함께한다.lifecycleScope : Activity나 Fragment가 활성 상태일 때만 코..
LaunchedEffect를 사용하다보면 한번만 호출해야 하는 경우가 생긴다. 그럴 때는 주로 Unit 또는 true를 사용하게 되는데 이 두개는 같은 동작을 하는데 권장되는 방법이 있을까 궁금증이 생겨 한번 알아보려고 한다. /** * The type with only one value: the `Unit` object. This type corresponds to the `void` type in Java. */public object Unit { override fun toString(): String = "kotlin.Unit"}위의 코드는 Unit의 내부 코드입니다. Unit에 대해서 알아보자면 Unit은 자바에서의 void 타입 역할을 하며, 아무것도 반환하지 않는 오직 한가지 값만 가지..
viewModel을 생성하는 방법은 크게 viewModel(), hiltViewModel()을 이용하는 2가지의 방법이 있다고 보여진다. 이 두개의 차이점이 궁금해졌고, 이 글에서는 이 두개의 방법에 대해서 알아보려 한다. viewModel()@Suppress("MissingJvmstatic")@Composablepublic inline fun viewModel( viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) { "No ViewModelStoreOwner was provided via LocalViewModelStoreOwner" }, key: String? =..
최근 진행하고 있는 사이드 프로젝트에서 이메일 회원가입, 이메일 변경등의 동작에서 버튼 클릭을 하면 인증번호가 보내지고 올라온 바텀시트에 인증번호를 입력하는 플로우를 진행하고 있었다. 하지만 중복 클릭에 대한 어떠한 처리도 해두지 않았기에 여러번 누르게 되면 api 호출이 여러번 되는 문제가 생겼고 확장함수를 만들어서 Modifier에서 사용하는 방식으로 해결을 했다. 우선 내가 해결한 코드는 아래와 같다. fun Modifier.throttleClick( throttleTime: Long = 1000L, onClick: () -> Unit): Modifier { var lastClickTime = 0L return this.clickable { val currentTi..
LinkedOut이라는 사이드 프로젝트에 참여하게 되면서 기존 코드를 조금 수정해보려 한다.  기존 코드는 ViewModel에서 sharedPreference 세팅을 해주기 위해서 다음과 같이 뷰모델의 함수에 파라미터로 context를 넘겨주고 있다. private fun saveLocalTokens(context: Context, accessToken : String, refreshToken : String){ SharedPreferencesUtil.saveTokensInfo(context, accessToken, refreshToken) SharedPreferencesUtil.saveClickedAutoLogin(context, clickedAutoLogin)} ViewModel에서 직접..
최근 사이드 프로젝트를 진행하는 도중 navigation stack 이동에 대한 문제가 발생했다.뒤로 가기가 되지 않는 것을 예상했는데 뒤로 가지는 문제였다. navigate 시켜주면서 쌓여있던 스택들을 제거하는 것으로 해결은 했고, 흔히 사용되는 사용방식들과 속성에 대해서 간단하게 정리해보려 한다.  흔히 사용되는 navigation 시나리오새 화면 연결NavController를 사용하고 경로를 지정하여 navigate 함수를 호출한다. 아래는 흔히 사용되는 예시이다.navController.navigate(Routes.Home)Login 화면에서 위의 코드를 실행했다면 위 사진처럼 기존에 있던 Login화면 위에 Home이 스택 형식으로 쌓이게 됩니다.   현재 화면 닫기Home화면에서 다시 Logi..
이 글은 Jetpack Compose Internals의 상태 스냅샷 시스템을 정리한 글입니다. 스냅샷 상태란컴포즈에서 스냅샷 상태는 상태 변경을 추적하고 관찰할 수 있는 분리된 상태를 의미합니다. 주로 mutableStateOf, mutableStateListOf, mutableStateMapOf, derivedStateOf, produceState, collectAsState 같은 함수 호출을 통해 State 타입을 얻게 되는데 이를 스냅샷 상태라 합니다. 모든 컴포저블 함수는 젯팩 컴포즈 컴파일러에 의해 자동으로 래핑되어, 본문 내 스냅샷 상태 읽기를 자동으로 추적합니다. 스냅샷 상태의 목적은 컴포저블이 읽는 상태가 변경될 때마다 컴포저블의 리컴포즈스코프를 무효화하여 다음 리컴포지션에서 다시 실행되..
Shared Element Transition최근 드로이드나이츠 2024에서 Compose SharedTransitionLayout라는 존재를 알게 되었습니다.Shared Element Transition Animation은 두 개의 다른 화면 사이에 공통으로 존재하는 요소가 매끄럽게 이동하거나 변형되는 것을 의미합니다.  이 글에서는 xml과 compose에서 각각 Shared Element Transition Animation을 구현해보려 합니다. xml우선 아무런 전환 효과를 주지 않은 화면을 살펴보겠습니다.  기본 화면 전환 애니메이션이 있지만 화면의 요소들이 매끄럽게 연결된다고는 보기 어려운 것 같습니다. 이제 Shared Element Transition Animation을 적용해보겠습니다. ..
Be Honest..
이것저것