AAC(Android Architecture Components)란?AAC는 안드로이드 앱 개발을 쉽게 만들기 위해 제공되는 아키텍처 구성 요소앱 개발 시 라이프사이클 관리, 데이터 저장, UI 상태 관리 등을 표준화MVVM 패턴과 함께 사용하면 유지보수성과 확장성이 뛰어난 앱을 개발 가능AAC 주요 구성 요소ViewModel : UI 데이터를 저장하고 라이프사이클을 관리LiveData : 데이터 변경을 감지하고 UI에 반영Room : SQLite DB를 관리하는 ORM 라이브러리LifeCycle : Activity / Fragment의 라이프사이클을 관리ViewModel- UI 데이터를 관리하고 라이프사이클을 유지하는 역할- ViewModel을 사용하면 화면 회전 시 데이터가 유지됩니다.class My..
Development/Android

- 앱에서 활용하던 GIF 파일들이 많아지면서 용량이 증가하고 관리 비용에도 점점 문제가 생기기 시작했습니다. - 이에 따라 애니메이션 재생에도 뒤처지지 않고, 용량도 더 적은 WebP 파일을 활용하기로 결정했습니다. - Glide를 활용해 렌더링을 진행했는데, 사실 기존 GIF 파일 재생 방법과 큰 차이가 없습니다. 같은 로직으로 두 가지 종류 파일 모두 호환 가능합니다. - WebP가 GIF보다 나은 점들은 아래와 같습니다. - raw 폴더 하위에 webp 파일을 넣고, Uri 경로를 구성해주어야합니다.val resourceUri = Uri.parse("android.resource://${context.packageName}/${R.raw.test}") - 해당 Uri 기반으로 로드해 줍니다. ur..

1. 코틀린에서의 람다 표현식이 무엇인가?- 람다 표현식은 함수를 명시적으로 선언하지 않고도 함수와 유사한 구조를 정의하는 간결한 방법입니다. - 인수로 전달하거나 변수에 저장할 수 있는 코드 블록을 만들 수 있습니다. - 람다 표현식은 간결하고 인라인 함수 동작을 제공하는 데 유용합니다.val sum = { a: Int, b: Int -> a + b } // Lambda expressionval result = sum(3, 4) // Invoking the lambda expressionprintln(result) // Output: 7 2. 코틀린에서 고차 함수란 무엇인가?- 고차 함수(High-Order Function)란 다른 함수를 인자로 받거나, 함수를 반환하는 함수를 의미합니다.- 함수를 변..
Hex Code(16진수 색상 코드)란?16진수(HEX, Hexadecimal)로 표현된 색상 값RGB(Red, Green, Blue) 색상을 조합하여 색을 나타냄웹 개발, 그래픽 디자인, 모바일 UI 등에서 자주 사용됨- 서비스에서는 이런 코드 값을 사용자 테마 등에 따라 API를 통해 다양한 값으로 클라이언트에 전달하곤 합니다.- "#FCFEF8" 형태로 수신되었다면 이것을 Color 객체로 변환하는 과정까지 확인해 보겠습니다.val color = Color(Color.parseColor("#FCFEF8"))- 정수 값으로 변환한 후, Color 객체로 감싸는 방법입니다.- 투명도를 추가하고 싶다면 #AARRGGBB 형식으로 사용 가능합니다. val color = Color.valueOf(Color...
- view는 id 외에 tag로도 접근 가능합니다.val targetView = (this as ViewGroup).findViewWithTag(number.toString())targetView?.visibility = View.GONE - XML이 아닌 코드에서 수정targetView.tag = "001"
ACTION_PICK으로 선택이 아니라 보기 상태로 갤러리를 진입하는 방법입니다.val intent = Intent(Intent.ACTION_VIEW)intent.type = "image/*"startActivity(intent)초기에는 위 코드로 단순하게 진입할 수 있었으나 매 진입 시마다 "지원되지 않는 파일 형식입니다"라는 Toast가 팝업 되었습니다.보통 ACTION_VIEW는 특정 파일을 열도록 되어 있기 때문에 type에 지정한 경로로는 제대로 된 파일 형식을 열어주지 못하고 image 폴더 전체를 보여주게 됩니다.이러한 오류 현상을 기반으로 갤러리 앱을 열지 않으려면 갤러리 앱 자체의 package name을 찾아 intent 처리해 주면 되겠습니다.val galleryIntent = act..
다음과 같은 View가 구성되어 있다고 가정해 보겠습니다. - home_add_btn_background 여기서 간혹 테마 설정 및 각종 효과를 위해 테두리의 색상을 변경하고 싶을 때가 있습니다.이 경우 view의 background 또는 foreground의 속성을 수정해 주면 됩니다.단, 코틀린 코드에서 XML로 정의된 shape의 stroke 색상을 동적으로 변경하려면 GradientDrawable을 수정해야 합니다. GradientDrawable이란 Android에서 사용되는 그래픽 객체로, 그라데이션(Gradient), 모서리 반경(Corner Radius), 테두리(Stroke), 배경 색상(Solid Color) 등을 설정할 수 있는 유연한 도구입니다. XML 파일이나 코..

Expandable menu위처럼 클릭할 때마다 열렸다 닫혔다를 반복하는 메뉴 레이아웃 구성 방법입니다.Compose의 AnimatedVisibility를 활용하여 간단하게 Expand 효과를 적용할 수 있습니다.기본 작동 방식visible: Boolean 값을 통해 콘텐츠의 표시 여부를 결정합니다.애니메이션 효과: 요소가 보이거나 사라질 때 애니메이션 효과를 자동으로 적용합니다.@Composablefun ColumnScope.AnimatedVisibility( visible: Boolean, modifier: Modifier = Modifier, enter: EnterTransition = fadeIn() + expandVertically(), exit: ExitTransition..
Intent로 화면을 전환할 때, 간혹 기획에 따라 전환 애니메이션이 필요한 경우가 존재합니다.이럴 때에는 anim 리소스를 정의하고, overridePendingTransition() 메서드를 활용해 주면 됩니다.오른쪽에서 나타나 왼쪽으로 사라지는 애니메이션 리소스 파일입니다. 실제 Intent 호출 시에는 아래처럼 정의해줍니다.startActivity(Intent(activity, StoreItemListActivity::class.java))activity?.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) 하지만 API 34부터는 해당 메서드가 deprecated 되어서 overrideActivityTra..
APK를 빌드하고 나서 Analyze APK를 클릭하면 위처럼 dex 파일과 디렉터리로 구성된 빌드 결과물을 확인할 수 있습니다.그런데, 프로가드 적용 유무에 따라 이 분석 결과가 달라집니다. 무슨 연관이 있을까요?DEX (Dalvik Executable) 파일이란?DEX 파일은 안드로이드 애플리케이션의 바이트코드를 담고 있는 파일입니다.안드로이드는 Dalvik/ART(안드로이드 런타임)를 사용해 DEX 파일을 실행합니다.모든 자바 클래스 파일(.class)들은 하나 이상의 DEX 파일로 변환되어 안드로이드 패키지(APK)에 포함됩니다.DEX 파일은 메모리와 성능 최적화를 위해 설계되었으며, 앱의 크기와 성능에 중요한 영향을 미칩니다.DEX와 ProGuard의 연관성- ProGuard가 DEX 파일 생성..