Composable 함수의 속성 @Composable 어노테이션을 통해서 함수나 표현식의 타입을 변경 해당 타입에 일부 제약 사항이나 특성을 부여 Compose Runtime Composable 함수가 사전에 정의된 특성을 준수하도록 가정 효과 병렬적인 Composition 우선순위에 따른 임의의 Composition 정렬 효과적인 Recomposition 위치 기억법 (positional memoization) 호출 컨텍스트 (Calling context) Compose Compiler는 일반적인 컴파일러 실행단계 중에 동작 Composable 함수의 중간 표현인 Intermediate Representation을 변환하여 추가적인 정보 부여 함수의 매개변수 목록의 끝에 새롭게 추가된 Composer ..
Android
Composable Function Jetpack Compose에서 가장 기본이 되는 요소 Composable Function의 의미 Composable 트리 구조 작성에 사용 Compose Runtime이 메모리에서 Composable 함수를 하나의 node로 이해 Composable Function 작성 방법 @Composable fun Greeting(name: String, modifier: Modifier = Modifier) { Text( text = "Hello $name!", modifier = modifier ) } @Composable 어노테이션을 이용하여 Composable 함수 작성 가능 어노테이션의 의미는 컴파일러에게 이 함수가 트리의 한 노드로 작동할 것이라는 의도 전달 함수에서..
Hilt 정의 및 기본 설정 프로젝트에서 종속 항목에 대해서 수동으로 삽입하는 코드를 줄이는 Android용 종속성 주입 라이브러리 모든 클래스와 종속 항목을 수동으로 구성 컨테이너를 사용하여 종속 항목을 재사용 및 관리 모든 Android 클래스에 컨테이너 제공 및 수명 주기 자동 관리 Hilt 목표 공식 문서 기반 표현 Android 앱을 위한 Dagger 관련 인프라 간소화 앱 간의 설정, 가독성 및 코드 공유를 용이하게 하기 위한 표준 구성요소 및 범위 세트 생성 테스트, 디버그 또는 출시와 같은 다양한 빌드 유형에 서로 다른 결합을 프로비저닝하는 쉬운 방법 제공 Hilt 설정 아래 환경은 Kotlin Domain Specific Language 기반으로 작성 Project Root build.g..
의존성 주입(Dependency Injection, DI) Hilt, Koin 등 다양한 Android DI를 돕는 라이브러리가 존재합니다. 그리고, Android 공식 사이트에서는 각종 편의성을 이유로 DI를 사용하길 권장합니다. 의존성(Dependency) 클래스 참조를 필요로 하는 다른 클래스 관계 A class를 만들기 위해서 B class가 필요한 것 class A(bClass: B = B()) { /* ... */ } class B { /* ... */ } 주입(Injection) 외부에서 객체를 생성하여 다른 객체에게 전달하는 것 Car class의 경우 Tire, Engine 등 다양한 부품을 외부에서 주입받아야함 private class Car( tire: Tire, engine: Eng..
Intent 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체 A 컴포넌트에서 B 컴포넌트를 실행 Intent에 정보를 담아 시스템에 의뢰하고, 시스템에서 B 컴포넌트를 실행 Intent 객체의 구성 요소 Action (액션) 수행할 액션 이름 e.g. ACTION_DIAL Data (데이터) 수행할 데이터의 URI e.g. tel: Category (카테고리) 수행할 액션에 대한 추가적인 정보 Type (타입) 수행할 인텐트 데이터의 명시적인 타입 e.g. MIME 타입, video/mpeg Component name (컴포넌트 이름) 대상 컴포넌트의 완전한 클래스 이름 Extras (추가 정보) 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키/값 Activity Action (액티비티 액션..
CompositionLocalProvider? 사이드 프로젝트를 진행하면서 아래와 같은 코드를 작성하게 되었습니다. CompositionLocalProvider(LocalAnalyticsHelper provides analyticsHelper) { FakeGpsTheme( darkTheme = darkTheme, androidTheme = shouldUseAndroidTheme(uiState), disableDynamicTheming = shouldDisableDynamicTheming(uiState), ) { FakeGpsApp(networkMonitor = networkMonitor) } } 해당 코드에서 CompositionLocalProvider 이 무슨 역할을 해주는지 알아보겠습니다. Compo..