
이전글에서 이어지는 내용입니다.https://small-stepping.tistory.com/956 UI 레이어와 데이터 레이어 분리레이어를 분리하는 이유코드를 여러 레이어로 분리하면 앱의 확장성이 높아지며 앱이 더 견고해지고 테스트하기 더 쉬워진다. 또한 경계가 명확히 정의된 여러 레이어를 사용하면 여러 개발자small-stepping.tistory.com 클래스가 작동하려면 다른 클래스의 객체가 필요한 경우가 많다. 클래스에 다른 클래스가 필요한 경우 필요한 클래스를 종속 항목이라고 한다. 다음 예에서 Car 객체는 Engine 객체에 종속된다.필요한 이 객체를 클래스가 가져오는 방법에는 두 가지가 존재한다. 클래스가 필요한 객체 자체를 인스턴스화 하는 것interface Engine { f..

레이어를 분리하는 이유코드를 여러 레이어로 분리하면 앱의 확장성이 높아지며 앱이 더 견고해지고 테스트하기 더 쉬워진다. 또한 경계가 명확히 정의된 여러 레이어를 사용하면 여러 개발자가 서로에게 부정적인 영향을 주지 않고 동일한 앱을 더 쉽게 작업할 수 있다. Android의 권장 앱 아키텍처에는 앱에 최소한 UI 레이어와 데이터 레이어가 반드시 있어야 한다고 명시되어 있다. 데이터 레이어 정의데이터 레이어는 앱의 비즈니스 로직과 앱 데이터 소싱 및 저장을 담당한다. 데이터 레이어는 단방향 데이터 흐름 패턴을 사용하여 UI 레이어에 데이터를 노출한다. 데이터는 네트워크 요청, 로컬 데이터베이스, 기기의 파일 등 여러 소스에서 가져올 수 있다. 앱에 데이터 소스가 두 개 이상 있을 수도 있다. 앱이 열리면..

1. 코루틴 동기와 비동기뛰어난 사용자 경험을 제공하기 위해서는 동시 실행이라는 중요한 기술이 필요하다. 동시 실행이란, 앱에서 여러 태스크를 동시에 실행하는 것이다. 예를 들어, 앱은 웹 서버에서 데이터를 가져오거나 기기에 사용자 데이터를 저장하는 동시에 사용자 입력 이벤트에 응답하고 적절하게 UI를 업데이트할 수 있다. 앱에서 동시에 작업하기 위해선 Kotlin의 코루틴이라는 것을 사용한다. 코루틴을 사용하면 코드 블록의 실행을 정지했다가 나중에 다시 시작할 수 있으며 그동안 다른 작업도 수행할 수 있다. 코루틴을 사용하면 비동기 코드를 더 쉽게 작성할 수도 있다. 즉, 한 태스크를 완전히 완료하지 않아도 다음 태스크를 시작할 수 있으므로 여러 태스크를 동시에 실행할 수 있다. 동기 코드동기 코드에..

중단점이란?적응형 앱을 만들려면 화면 크기에 따라 레이아웃이 변경되도록 해야 한다. 레이아웃 변경이 이루어지는 측정 지점을 중단점이라고 한다. Material Design은 대부분의 Android 화면을 처리하는 체계적인 중단점 범위를 만들었다. 이 중단점 범위 표에서는 앱이 화면 크기가 600dp 미만인 기기에서 실행 중인 경우 모바일 레이아웃을 표시해야 함을 보여준다. 창 크기 클래스 사용하기Compose에 도입된 WindowSizeClass API를 사용하면 Material Design 중단점 구현이 간단해진다.창 크기 클래스는 너비와 높이에 대해 소, 중, 대형의 세 가지 크기 카테고리를 도입한다. 프로젝트에서 WindowSizeClass API를 구현하기 위해 다음 단계를 따라야한다....

이전에 작성한 글에서 NavHostController를 사용해 한 화면에서 다른 화면으로 이동하는 방법을 알아봤다.https://small-stepping.tistory.com/926 Compose Navigation 경로 정의 및 NavHostController이번에 작성하고 있는 글은 Jetpack Compose의 Navigation 튜토리얼 부분이다. https://developer.android.com/courses/pathways/android-basics-compose-unit-4-pathway-2?hl=ko#codelab-https://developer.android.com/codelabs/basic-android-kotlismall-stepping.tistory.com Compose를 사..
문자열을 다룰 때 빼놓을 수 없는 자료 구조인 접미사 배열(Suffix Array)은 다양한 문제를 푸는데 사용 가능하다.이 접미사 배열은 어떤 문자열 S의 모든 접미사를 사전순으로 정렬해둔 것으로 기본적으로 문자열 길이의 제곱에 비례하는 메모리가 필요하기 때문에 보통 각 접미사의 시작 위치를 담는 정수 배열로 구현된다. 예를 들어, 문자열 S = banana의 접미사 배열은 다음과 같다.Suffixindexa6ana4anana2banana1na5nana3 접미사 배열은 위에서 말했듯 각 접미사의 시작 위치를 담는 정수 배열로 구현되며, 이를 사용해 문자열 검색에 사용할 수 있다. 접미사 배열을 정렬 알고리즘으로 구현할 경우 구현은 매우 쉽다. 그러나 시간 복잡도가 O(nLogn)이 걸리고 최악의 경우 ..

1. 세그먼트 트리란? 간격 또는 세그먼트에 대한 정보를 저장하는데 사용되는 트리 데이터 구조이다.주어진 포인트를 포함하는 저장된 세그먼트에 대해서 쿼리할 수 있다. N개의 원소에 대하여 구성된 세그먼트 트리는 트리를 생성하는 비용은 O(N)이다.원소를 Update하는데 O(Log N)의 시간 복잡도가 필요하고, 쿼리 또한 O(Log N)의 시간 복잡도가 요구된다. 세그먼트 트리는 누적합, 구간합, 구간의 최솟값을 구하는데 사용할 수 있다. 1.1. 생성1차원 배열을 통해 구현하며 0번 Index는 사용하지 않는다.원본 배열 Size의 2배 크기로 구성한다.크기를 2배로 잡는 것은, 원본 배열로 세그먼트 트리의 리프 노드를 구성하게 되면, 세그먼트 트리가 이진트리이므로 (리프노드 개수 / 2)를 하면 모..

노드 정점들을 연결하는데 가장 적은 비용으로 연결하려면 어떻게 해야할까? 해당 질문을 해결하기 위한 대표적인 방법은 크루스칼 알고리즘이다.크루스칼 알고리즘이란, 모든 노드를 지나면서 사이클이 생기지 않고 가장 적은 비용을 가는 경로를 알 수 있다. 이 4개의 그림을 보자.모두 그래프의 모든 정점을 지난다는 것을 알 수 있으며, 순환고리(사이클이 생기지 않는 연결)이다.이러한 연결을 신장 트리라고 한다. 각 그림들의 가중치 합은 다음과 같다.3 + 4 + 1 = 8 4 + 3 + 2 = 94 + 5 + 2 = 113 + 2 + 1 = 6 가장 작은 가중치 합을 가진 그림은 우하단의 그래프이며, 이러한 값을 갖는 연결을 최소 신장트리라고 한다.최소 신장 트리를 구하는 대표적인 방법은 다음과 같다.프림..

이번에 작성하고 있는 글은 Jetpack Compose의 Navigation 튜토리얼 부분이다. https://developer.android.com/courses/pathways/android-basics-compose-unit-4-pathway-2?hl=ko#codelab-https://developer.android.com/codelabs/basic-android-kotlin-compose-navigation Jetpack Compose의 Navigation | Android Basics Compose - Navigation in Jetpack Compose | Android DevelopersNavigation 구성요소를 사용하여 화면이 더 많은 복잡한 앱을 빌드하는 방법과 여러 컴포저블..
ViewModel의 단위 테스트 작성 이전에 만든 Unscramble 게임 앱에 단위 테스트를 추가하는 과정이었는데, Unscramble 앱은 사용자가 글자가 뒤섞인 영어단어를 추측하고 추측이 맞았을 때, 포인트를 얻는 간단한 방식의 단어 게임이었다. 이 앱을 기준으로 ViewModel의 단위 테스트 작성법을 알아보고자 한다. https://github.com/google-developer-training/basic-android-kotlin-compose-training-unscramble GitHub - google-developer-training/basic-android-kotlin-compose-training-unscrambleContribute to google-developer-traini..