안드로이드
-
Kotlin Coroutine (코루틴) 내부 동작원리안드로이드 2024. 3. 26. 22:55
일이 바쁘다는 핑계로 계속해서 블로그를 미루고 있었는데, 최근 관심있게 공부중인 내용이 있어 이에 관해 정리해보고자 글을 작성하게 되었다. 안드로이드 앱을 개발하며 서버와 API 를 이용한 네트워크 통신 등의 비동기 처리가 필요한 기능을 구현할 수 있는 방식은 여러가지가 있다. AsyncTask, RxJava, Coroutine 등등.. 그 중 Coroutine 은 내가 알고 있는 기존의 처리 방식과 매우 달랐다. suspend 함수를 통해 Main thread 에 대한 간섭 없이 서버로부터 데이터를 받기까지 기다릴 수 있었는데, 이게 어떻게 가능한 것인지 내부 구현 방식이 궁금해졌고, 이에 대해 공부해보았다. Concurrency 와 ParallelismCoroutine 의 완벽한 이해를 위해선 Con..
-
[Kotlin] Loom 에 대해 (Room 아님)안드로이드 2023. 4. 16. 23:43
최근 있었던 KotlinConf 발표 주제 중 Loom 이라는 키워드가 있어 Room 오타인가? 하고 관련 내용을 찾아보게 되었다. 그런데 한 번 보고 나니 꽤 쓸모있어 보이는 기술같아 정리해보게 되었다. 그래서 Loom 이 뭐에요 일단 이 Loom 을 한마디로 정의하자면 경량 쓰레드 모델을 이용한 프로그래밍을 지원하는 프로젝트인데, 기본적으로 우리는 작업의 최소 단위를 쓰레드로 알고 있다. 그리고 우린 쓰레드를 네트워크 작업 등의 시간이 오래 걸리거나 응답을 받지 못할 수 있는 작업을 진행하는데 사용하며 프로세스 자체의 진행 흐름을 방해하지 않기 위해 사용한다. 그런데 이 쓰레드를 많이 생성하게 되면 치명적인 문제가 있는데, 그건 바로 컨텍스트 스위칭 (문맥 교환) 과정에서 많은 시간이 소요된다는 것이..
-
Object 와 Companion Object 의 차이점에 대해안드로이드 2023. 4. 9. 22:29
Kotlin 에선 Object 선언을 통해 싱글톤 패턴을 구현할 수 있다. object SampleObject { private const val TEMP = "" } 위 샘플 코드와 같이 싱글톤으로 객체를 생성하고 싶은 클래스에서 object 구문을 이용해 간편하게 싱글톤 패턴을 이용할 수 있는데, 이와 비슷하게 생긴 companion object 라는 녀석이 있다. companion object 의 사용 방식은 object 와 유사한데, 아래처럼 이용할 수 있다. SampleClass() { companion object { private const val TEMP = "" } } 사용 방법에서의 object 와 가장 큰 차이점을 꼽자면, object 는 클래스 외부에서 선언하지만 companion ..
-
sealed class 란?안드로이드 2023. 4. 2. 23:12
코틀린에는 다양한 클래스가 존재한다. data class, object class, companion class, 등등.. 그런데 최근 난생 처음보는 sealed class 라는 클래스가 보여 이에 대해 알아보았다. 결론부터 말하자면 sealed class 는 본인을 상속받은 자식 클래스가 어떤것들이 있는지 그 목록을 볼 수 있다. (??? : 너 내가 주민등록등본 떼면 어디 사는지 다 나와~) 예를 들어보자면, 이렇게 간단한 abstract class 가 있다. 그리고 그 abstract class 를 상속받는 Running, Walking, Swimming 클래스를 선언하였다. abstract class SealTestClass class Running: SealTestClass() class Wal..
-
[Jetpack Compose] 스낵바 표시, MutableState 사용기법에 대해안드로이드 2023. 3. 18. 22:39
Jetpack Compose 에서 스낵바를 표시하고 MutableState 사용하는 몇 가지 방법에 대해 알아보자. 먼저 스낵바는 Scaffold 컴포넌트를 이용해 사용할 수 있다. 컴포즈에서는 Material component composable 들을 기본으로 제공하는데, Scaffold 컴포넌트를 최상위에 두면 하위 컴포넌트들에서 Material 컴포넌트들을 이용할 수 있다. 그래서 스낵바를 어떻게 띄우냐, val scaffoldState = rememberScaffoldState() val scope = rememberCoroutineScope() Button(onClick = { scope.launch { scaffoldState.snackbarHostState.showSnackbar("hello..
-
Firebase Crashlytics 에 대해안드로이드 2023. 3. 5. 22:06
Firebase Crashlytics 는 앱 사용중 크래시 발생으로 비정상 종료시 이에 대한 보고서를 자동으로 생성하고 개발자가 볼 수 있게 도와주는 역할을 한다. 앱 사용 환경은 매우 다양한데, 앱 배포 이후 다양한 환경에서 발생하는 여러 크래시 정보들을 볼 수 없다면 이에 대한 패치 또한 이루어질 수 없고, 이는 결국 사용자 수 감소로 이어질 것이다. Crashlytics 는 이러한 문제를 해결하고 관리할 수 있게 도와준다. 연동 방법 먼저, Firebase 콘솔에 앱을 등록해야 한다. 이 글에서 Firebase 앱 등록까지 다 진행하면 너무 길어질 것 같아 아래 링크를 참고해 등록하면 될 것이다. https://m.hanbit.co.kr/channel/category/category_view.htm..
-
[Jetpack Compose] 위젯에 대해안드로이드 2023. 1. 6. 23:26
기존의 명령형 UI 개발 방식에서는 setContentView() 함수를 이용해 Activity 에 표시할 xml 을 불러왔었다. 선연형 UI 개발 방식인 Jetpack Compose 에서는 xml 을 사용하지 않으므로 setContentView() 함수 대신 setContent {} 를 사용하고 이 내부에 여러 위젯들을 작성하는 방식으로 레이아웃을 표시한다. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // 여기에 위젯들 선언 } } } 위젯이 뭔데 Jetpack Compose 는 여러가지 위..
-
[Jetpack Compose] 너는 뭐냐안드로이드 2023. 1. 6. 22:16
지금까지 UI 를 개발할 땐 계속 틀딱처럼 xml 만을 이용해 왔었다. 그런데 이번에 새 프로젝트에 들어가기 전, 조금 여유 시간이 생겨 Jetpack Compose 를 공부해 다음 프로젝트에 적용해보고자 한다. 그래서 Jetpack Compose 가 뭔데 Jetpack Compose 를 한 줄로 설명하면 Android 개발을 위한 선언형 UI Kit 이라고 한다. 선언형 UI 가 뭔데 원래도 뭐 선언같은거 했었잖아 기존의 xml 을 이용한 명령형 UI 개발 시에는 화면의 상태가 변경되면 상태가 저장되어 있던 변수의 값을 변경하고, 변경된 값을 뷰에 반영하도록 뷰 객체를 가져와 setText() 등의 함수를 호출하는 작업이 필요했다. username = "재빈" // 값 바뀜 textView.setTex..