Android/Tech (52) 썸네일형 리스트형 [Jetpack Compose] Jetpack Compose 의 다양한 Side-Effect State Management In Composables Composable 은 기본적으로 Stateless 입니다. '기본적으로 Stateless' 라는 문장의 의미는, 때로는 Stateless 하지 않을 수 있다는 것을 말합니다. @Composable fun StatelessText() { Text(text = "ADD") } 위 Composable 은 Stateless Composable 입니다. 말 그대로 아무런 상태도 갖지 않기 때문에, 단독으로 있는 경우 별도의 Recomposition 이 발생하지 않습니다. @Composable fun StatefulText() { val text = remember { mutableStateOf("false") } Text( modifier = Modifi.. Bitmap, Drawable, BitmapDrawable, ImageBitmap, AndroidBitmap 일단, 헷갈립니다. 해당 포스트를 작성하는 것에는 여러 가지 이유가 있겠지만, 가장 우선적인 이유로는 제가 헷갈렸기 때문입니다. 안드로이드에는 이미지 처리를 위한 수많은 클래스와 인터페이스가 존재하는데, 이 모든 것이 통폐합되어 이미지의 오리지널 파일인 Bitmap 과 안드로이드에서의 이미지 표시를 위한 Drawable 만 남았으면 좋겠다 싶을 정도로 이들이 헷갈리곤 합니다. 나를 바꿀 수 없다면 환경을 바꾸면 되고, 환경을 바꿀 수 없다면 나를 바꾸면 됩니다. 하나씩 알아봅니다. Bitmap Bitmap 의 기본적인 정보(feat.Webp) 에 대해서는 다음 포스트에 정리해두었습니다. 비트맵과 WebP 인간의 눈으로 디지털 디바이스에서 표시되는 이미지 (그림, 사진) 를 보는 것은 픽셀이라는 작은 점들.. 코루틴과 그린 스레드 Coroutine 코루틴은 작업 수행을 일시 정지 및 재개될 수 있도록 하는 프로그래밍 구성요소입니다. 코루틴은 서브루틴을 일반화합니다. 협력 작업, 예외, 이벤트 루프, 반복자, 무한 목록 및 파이프와 같은 친숙한 프로그램 구성 요소를 구현하는 데에 매우 적합합니다. 멜빈 콘웨이(Melvin Conway) 는 1958년 어셈블리 프로그램 구축에 이를 적용하면서 Coroutine 이라는 용어를 만들었습니다. 이후 이에 대한 설명은 1963년에 처음 발표되었어요. 즉, 코루틴이 비교적 최근에 등장한 개념이라 알고 있는 분들이 계신데, 전혀 그렇지 않습니다. Coroutine 은 Co-Routine 이라 쓸 수 있는데, Routine 은 '컴퓨터 프로그램의 일부로서, 특정한 일을 실행하기 위한 일련의 명령'.. [Jetpack Compose] Glide 와 Coil, 무엇을 사용하면 좋을까. 이미지 처리 라이브러리 개발시, 저는 UI에 관련된 라이브러리는 최대한 사용하지 않으려고 하는 편입니다. 어쨌든 라이브러리도 사람이 만드는 것이고, 자세히 파고들면 그다지 어려운 개념이 들어가는 것도 아니니까, 직접 구현하겠다는 생각으로 말이죠. 그런 저도 꼭 사용하는 UI 라이브러리는 이미지 처리 라이브러리입니다. 애초에 이미지 자체가 워낙 심화된 영역이기도 하고, 이미지 처리 라이브러리는 그 역사가 깊어 사용하기도 수월하고 성능도 좋기 때문이죠. 이미지 처리 라이브러리의 역사는 안드로이드의 역사와 궤를 같이 합니다. Glide, Fresco, Picasso, 그리고 모던한 Coil 까지, 수많은 라이브러리가 존재하죠. 우리는 수많은 선택지들 중 하나를 골라야 합니다. 물론 여러 라이브러리를 동시에 사.. 안드로이드와 Clean Architecture Clean Architecture on Android 안드로이드에서의 클린 아키텍쳐는 어떤 모습일까요? 현재 DND 8기로 활동하면서 진행 중인 프로젝트에 클린 아키텍쳐를 적용했습니다. Presentater-Domain-Data 로 이루어진 Three Layers 방식을 도입하여 개발하고 있습니다. 이번 포스트에서는 Android 프로젝트에 클린 아키텍쳐를 적용하는 방식 및 그 효과를 알아가고자 합니다. 클린 아키텍쳐를 도입하는 이유 중 가장 중요한 것은 관심사 분리입니다. 안드로이드 프로젝트에 클린 아키텍쳐를 적용해보거나 공부해 보신 분들은 아시겠지만, 각 레이어가 별도의 모듈로 존재하고, 각 모듈은 꼭 필요한 모듈에만 의존하도록 구현됩니다. (별도의 모듈화가 진행되지 않는 경우도 있습니다) 각 레이어.. JVM 의 Garbage Collector Garbage Collector (GC) 메모리 관리는 언제나 중요합니다. 할당된 메모리보다 큰 메모리 리소스를 사용하려 하거나, 메모리에서 해제된 객체 등에 재접근하는 경우 등 메모리와 관련된 다양한 개발자의 실수로 프로그램이 뻗어버리는 일이 생기곤 하기 때문입니다. JVM 의 GC 는 Garbage Collecting Algorithm 을 운용하여 개발자가 비즈니스 로직에만 집중할 수 있도록 도와줍니다. GC 란? GC 는 JVM 메모리 구조 속 Heap Area 에 있는 인스턴스들을 대상으로 작동하며, 더 이상 참조되지 않는 인스턴스의 메모리를 자동으로 반환하도록 하는 메모리 관리 기법입니다. Heap 에는 참조형 타입의 인스턴스가 할당됩니다. 장, 단점은 다음과 같습니다. 장점 개발자가 메모리 할.. Jetpack Compose 의 remember Jetpack Compose 의 Composable 은 기본적으로 State-less 입니다. State 는 Screen-Level 에서 Composable 로 전파되고, Composable 에서 발생하는 Event 는 Screen-Level 로 전파됩니다. 이와 같이 구현된 이유는 재사용성 및 테스트 가능성 때문입니다. 관련된 내용은 이전에 상태 호이스팅 관련 포스팅에 설명해두었습니다. [Jetpack Compose] 상태 호이스팅 기존XML 방식에는 큰 문제점이 하나 있었는데, 그것은 바로 View 가 스스로의 상태를 정의하고 보존한다는 것입니다. 상태는 View 를 그 자체로 인식할 수 없도록 하며, 이는 곧 테스트 가능성과 재 blothhundr.tistory.com Composable 내에서 참.. Serializable, Parcelable 개발을 하다 보면 자료를 직렬화해야 하는 경우가 종종 있습니다. 안드로이드 개발의 경우는 Intent 를 통해 Activity 에서 또 다른 Activity 로 데이터를 보낼 때 이용됩니다. Intent 의 putExtra() 메서드는 Primitive 타입 (코틀린엔 Primitive 타입이 없지만) 들을 메서드 오버로딩을 통해 구현해 두었기 때문에 별도의 직렬화가 필요하지 않습니다. 하지만 그 외의 클래스 인스턴스를 전송하려면 직렬화가 요구됩니다. 직렬화 직렬화는 데이터를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것입니다. 반댓말은 역직렬화입니다. 역직렬화는 당연히, 디스크에 저장한 데이터를 읽거나, 네트워크 통신을 통해 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것입니.. 이전 1 2 3 4 5 6 7 다음 목록 더보기