DI (Dependency Injection) DI(dependency injection)는 프로그래밍에 널리 사용되는 기술이며 Android 개발에 매우 적합하다. DI 원칙을 따르면 좋은 앱 아키텍처의 토대를 마련할 수 있다. 종속성 주입을 구현하면 다음과 같은 이점이 있다. 코드 재사용성 리팩토링이 용이 테스트 용이성 먼저, 앱 수준 gradle에 플러그인을 추가 plugins { id 'com.android.application' id 'kotlin-android' // dagger를 위한 plugin id 'kotlin-android-extensions' // 어노테이션을 통해 컴파일 타임에 코드 생성을 도와줌 id 'kotlin-kapt' } 그 후, dagger 라이브러리를 추가 depe..
문제 설명 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. 1. x의 모든 0을 제거합니다. 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한 조건 s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다..
Paging basic 사용자에게 정보를 표시하는 가장 일반적인 방법 중 하나는 리스트(안드로이드에선 리사이클러뷰나 리스트 뷰등이 있을 것이다.)를 사용하는 것이다. 그러나 때때로 이러한 목록은 전체 콘텐츠로 통하는 작은 창에 불과다. 사용자는 제공되는 정보를 스크롤할 때, 하단에 더 많은 데이터가 있을 것이라고 예상하는 경우가 많다. 데이터를 가져올 때 효율적이고 원활하게 진행되어 계속 늘어나는 로드가 사용자 환경을 저해하지 않아야한다. (사용자 경험) -> 한 번에 로딩 X 그러므로 점진적인 로딩은 성능 향상에도 도움이 된다. 앱에서 많은 양의 데이터를 한 번에 메모리에 저장할 필요가 없기 때문이다. 정보를 점진적으로 가져오는 이 프로세스를 페이징이라하며 각 페이지는 가져올 데이터 청크에 대응한다. ..
앱 모듈화 개요 단일 Gradle이 아닌, 여려 Gradle 모듈이 있는 프로젝트를 다중 모듈 프로젝트라고 한다. (모듈화의 결과) 배경 - 증가하는 코드의 문제 프로젝트가 진행되면서 코드베이스가 계속 증가하게 되는데, 시간이 지남에 따라 확장성, 가독성 및 전반적인 품질이 떨어지는 경우가 많다. 모듈화는 유지 관리 가능성을 개선하고 이런 문제를 방지할 수 있는 방식으로 코드베이스를 구조화 하는 방법이다. 모듈화란? 모듈화는 코드베이스를 느슨하게 결합된 독립적인 부분으로 구성하는 방법이다. 각 모듈은 독립적이며 명확한 역할을 한다. 하위 문제를 해결하기 위해 문제를 더 작고 쉬운 문제로 나누면 대형 시스템 설계와 유지보수의 복잡성이 줄어들게 된다. 모듈화의 장점 재사용성 - 모듈화를 사용하면 코드를 공유..
Jetpack Compose UI 개발을 간소화하고 간편하게 할 수 있도록 도와주는 툴킷. 기존의 UI는 명령형 방식이었지만, Compose는 선언형 방식. UI가 어떻게 보일지에 대한 구현에서 무엇을 보여주면 되는지에 대한 구현으로 변경. 뷰의 상태만 선언하여 구현 부분은 프레임워크에게 맡기는 방식. (알아서 만들어 줌) 데이터가 변경되면 프레임 워크가 알아서 해당 함수들을 재호출(리컴포지션)하여 View를 업데이트. 적은 코드, 유지보수, 재사용 및 확장성 용이. 기존에는 xml에 직접 그리고 Activity에서 findViewById, ViewBinding, DataBinding을 통해 컴포넌트에 접근 했지만, Compose는 Kotlin을 통해 직접 UI를 다룰 수 있음 xml 대신 setCont..
package com.example.compose.rally import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtim..
문제 설명 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다. 입출력 예 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1..
Compose 레이아웃 관련 에러 LazyHorizontalGrid를 사용하면서 java.lang.IllegalArgumentException: LazyHorizontalGrid's height should be bound by parent. 에러를 발견하였다. 에러내용은 해당 컴포즈 UI가 부모 레이아웃에 높이에 맞지 않다는 내용이였다. 이 에러가 발생하게 된 계기가 Column(modifier.verticalScroll(rememberScrollState()) // 이 부분) { // Spacer를 통해 공백 생성 Spacer(Modifier.height(16.dp)) // 검색 창 SearchBar(Modifier.padding(horizontal = 16.dp)) // 첫번째 섹션 HomeSect..
Compose Basic 1. Compose Jetpack Compose는 UI 개발을 간소화하기 위해 설계된 최신 툴킷입니다. 반응형 프로그래밍 모델을 Kotlin 프로그래밍 언어의 간결함 및 사용 편의성과 결합합니다. 이는 완전히 선언적인 접근 방식으로, 데이터를 UI 계층 구조로 변환하는 일련의 함수를 호출하여 UI를 설명합니다. 기본 데이터가 변경되면 프레임워크가 이러한 함수를 자동으로 다시 실행하여 UI 계층 구조를 업데이트합니다. compose ui를 사용하려면 Composable 어노테이션을 선언해야함 @Composable은 클래스단위에는 붙일 수 없고, 함수 단위에 붙일 수 있음 @Composable을 붙어야 Text 같이 선언형 UI를 구현할 수 있음 2. Recomposition Rec..
package com.codelab.codelab_prac_1 import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.u..