-
Kotlin Coroutine (코루틴) 내부 동작원리안드로이드 2024. 3. 26. 22:55
일이 바쁘다는 핑계로 계속해서 블로그를 미루고 있었는데, 최근 관심있게 공부중인 내용이 있어 이에 관해 정리해보고자 글을 작성하게 되었다. 안드로이드 앱을 개발하며 서버와 API 를 이용한 네트워크 통신 등의 비동기 처리가 필요한 기능을 구현할 수 있는 방식은 여러가지가 있다. AsyncTask, RxJava, Coroutine 등등.. 그 중 Coroutine 은 내가 알고 있는 기존의 처리 방식과 매우 달랐다. suspend 함수를 통해 Main thread 에 대한 간섭 없이 서버로부터 데이터를 받기까지 기다릴 수 있었는데, 이게 어떻게 가능한 것인지 내부 구현 방식이 궁금해졌고, 이에 대해 공부해보았다. Concurrency 와 Parallelism Coroutine 의 완벽한 이해를 위해선 Co..
-
12월 31일에 작성하는 2023년 회고기타 2023. 12. 31. 21:31
매년 점점 다사다난해지는 것 같다. 작년은 내가 살면서 다신 할 수 없을 경험들을 많이 했다고 자부할 수 있었는데, 올해도 작년 못지않게 많은 일들이 있었던 것 같아 즐거웠고, 내년이 더 기대되는 한 해 였다. 팀원의 폭발적 증가 작년까지는 나 포함 2명 뿐이었던 우리팀이, 올해는 나 포함 6명으로 회사 내 최대 인원을 둔 팀의 팀장이 되었다. 팀원별로 맡은 도메인이 달라 관리의 어려움도 있었고, 처음 계획했던 것보다 유려하지 않게 흘러간 부분도 있어 조금은 아쉽지만, 이런 초보 팀장을 둔 상황에서도 각자 맡은 역할을 알아서 잘 해내준 팀원들께 고마울 뿐이다. 팀 인원 6명 중, 5명이나 이달의 우수사원에 선정되며 결과적으로는 성공이 아닐까(?) 하는 생각은 있다. 많은 인원의 팀을 운영할 때 가장 최우..
-
[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..
-
안티 드론 기법에 대해보안 2023. 2. 27. 02:21
최근 북한 무인기 사건과 함께 드론에 대한 관심도가 높아지고 있다. 그런 의미에서 드론을 공격하는 행위인 안티드론의 기법들에 대해 정리해보고자 한다. 안티드론 기법의 분류는 크게 3가지로 정리할 수 있다. 1. 물리적 공격 2. 사이버 공격 3. 해킹 순서대로 하나씩 살펴보자. 물리적 공격 물리적 공격은 큰 설명이 필요 없을 것이다. 총으로 쏘거나, 크기가 큰 드론이라면 미사일을 쏘거나, 그물을 이용하는 등 물리적으로 드론의 비행을 방해하는 기법이다. 가장 확실하다고 볼 수 있겠지만 드론이 회피비행을 하거나 속도가 아주 빠르다면 공격이 어려울 수 있다. 사이버 공격 사이버 공격은 드론의 통신을 방해하는 행위 정도로 볼 수 있다. 대표적으로는 재밍과 스푸핑이 있는데, 재밍은 아주 센 주파수를 쏴 드론과 조..