목록전체 글 (122)
기록
모듈화는 애플리케이션을 여러 개의 독립적이면서도 상호작용할 수 있는 모듈로 나누는 과정입니다. Android에서는 모듈화를 통해 애플리케이션의 유지보수성을 높이고, 빌드 시간 단축, 코드 재사용, 팀 간 협업을 용이하게 할 수 있습니다. 모듈화의 이점 1. 코드 분리: 특정 기능을 담당하는 코드와 리소스를 독립적인 모듈로 분리하여 코드베이스를 깔끔하게 유지할 수 있습니다. 2. 재사용성: 특정 기능을 다른 프로젝트에서 재사용할 수 있는 라이브러리 모듈로 정의할 수 있습니다. 3. 빌드 시간 단축: 변경된 모듈만 빌드하기 때문에 전체 빌드 시간을 단축할 수 있습니다. 4. 독립적인 업데이트: 모듈별로 업데이트와 배포가 가능하여 앱 업데이트 시 유연성을 제공합니다. Android에서 모듈의 종류 1. 앱 모..
안드로이드 Compose에서 상태 호이스팅(State Hoisting)은 상태(State)를 컴포저블(Composable) 밖으로 끌어올려 더 높은 레벨에서 관리하게 하는 패턴입니다. 이는 컴포저블을 더 재사용 가능하고 테스트하기 쉽게 만들어 줍니다. 간단한 버튼을 눌러 텍스트를 변경하는 예제를 통해 상태 호이스팅을 이해해보겠습니다.여기서는 텍스트의 State를 상위 컴포저블로 끌어올려 관리하도록 하겠습니다. @Composablefun TextHoisted() { var text by remember { mutableStateOf("state") } // 상태와 상태를 변경하는 함수(onTextChange)를 하위 컴포저블에 전달 TextToggleContent( text = te..
현재 관리 중인 앱이 Fragment를 중심으로 구성되어 있는데, 이번에 새 기능 업데이트를 통해 추가되는 페이지를 Compose로 구현하기로 결정했습니다. 회사 프로젝트는 이미 Compose 환경이 구축되어 있어 바로 컴포저블을 사용할 수 있었지만, 개인적으로 운영 중인 앱은 아직 Fragment 기반으로 되어 있어 Compose 사용을 위한 최초 마이그레이션 작업이 의미가 있었기에 이를 공유하려고 합니다. Compose 사용 환경 구축하기먼저 앱 build.gradle 파일에 Compose 사용을 위한 의존성을 추가해야 합니다. buildFeatures { compose true } ... dependencies { //compose impl..
Java에서 Kotlin을 처음 접할때 가장 생소하고 헷갈리는 것 중 하나가 Custom Getter Setter이다. 먼저 var과 val의 차이를 생각해보면, 당연히 val은 get만 사용 가능하다. var 변수는 가져오면 get, set 둘 중 하나의 동작을 취할 수 있다. 이때 커스텀 기능은 get, set 중 원하는 동작을 개발자가 추가할 수 있다. 아래는 커스텀 set 예제 코드이다. private var productDetails = listOf() set(value) { field = value getProductDetails() } 이는 set을 부르는 순간에 getProductDetails() 를 호출하여 set할때마다 무조건 변수가 업데이트 되도록 한다. 이때 헷갈리는게 value와 ..
파이어베이스 동적링크 지원되는 웹주소를 자동화하려면 두가지 조건이 필요하다. 1. Intent filter에 autoVerify를 true로 선언 앱스킴 선언할때 인텐트 필터로 해당 속성을 함께 부여해준다. 2. 파이어베이스 프로젝트에 SHA-256 인증서 지문 추가 그리고, 사용하는 딥링크가 파이어베이스 동적링크라면 파이어베이스 프로젝트에 SHA-256 인증서 지문을 추가해야 한다. SHA-256 지문을 얻으려면 Android 터미널에서 ./gradlew signingReport 해당 명령어 입력시 지문값이 촤르륵 나온다.
https://developer.android.com/jetpack/compose/setup?hl=ko#sample 빠른 시작 | Jetpack Compose | Android Developers 빠른 시작 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Compose로 최적의 환경에서 개발하려면 Android 스튜디오를 다운로드하고 설치하세요. 새 프로젝트 템 developer.android.com 여러가지 공식 안드로이드 샘플 앱을 다운 받을 수 있다.
참고 공식문서 : https://developer.android.com/jetpack/compose/components/dialog?hl=ko 대화상자 | Jetpack Compose | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 대화상자 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Dialog 구성요소는 팝업 메시지 developer.android.com Dialog는 Navigation, ViewModel SavestateHandle 이런거 없이 그대로 사용자에게 다음 행위에 이뤄질 일을 경고하는 스크린을 띄움과 동시에 행위 함수도 Dialog에 보내는게 구현되어 있어 ..
MutableState 값을 그대로 다른 컴포저블로 보내고, 이걸 또 다른 컴포저블로 보내고, 직접 .value 참조하여 값을 변경하면 위에서부터 아래까지 전부 리컴포즈가 일어난다고 한다. val dialogDescription = remember { mutableStateOf("") } ... PostCard( dialogDescription, ) ... PostCard( dialogDescription: MutableState, ) { dialogDescription.value = "텍스트" } 뭐 이런 형태에 대하여... 실제 코드는 depth도 더 깊고 변경하는 곳도 더 많았다. 이러한 경우에서는 해당 값에 대한 람다를 만들어서 아래로 람다함수만 보내 변경하는 방식이 많이 쓰인다고 한다. var ..
다익스트라 알고리즘 대표적인 최단경로 알고리즘 특정 노드에서 출발하여, 다른 모든 노드로 가는 최단경로 계산 그리디로 분류 (매 상황마다 가장 비용이 적은 노드를 선택하고 이를 반복하기 때문) 동작 과정 출발 노드를 설정한다 최단거리 테이블을 초기화한다 (출발 노드 자기 자신 0, 나머지는 무한) 방문하지 않은 노드 중 최단거리가 가장 짧은 노드를 선택한다 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단거리 테이블을 갱신한다 3번과 4번 과정을 반복한다 Kotlin 우선순위 큐로 구현한 다익스트라 알고리즘 (백준 1753번) import java.util.* import kotlin.collections.ArrayList const val INF = 1000000 fun main() { val ..
fun main() { val s = Solution() // println(s.solution(arrayOf("banana", "apple", "rice", "pork", "pot"), intArrayOf(3,2,2,1,1), // arrayOf("chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana") // )) println(s.solution(arrayOf("apple"), intArrayOf(10), arrayOf("banana", "banana", "banana", "banana", "banana", "banana", "banan..