최근 JetPack Compose를 공부하다보니 처음보는 메서드를 보았습니다.CompositionLocalProvider(LocalColor provides color) { Composalble3()}여기서 LocalColor provides color라는 부분에서 provides라는 메서드가 어떤 역할을 하는지 알수없었습니다. 문서를 봐보니 이런식으로 나와 있었습니다.provides는 infix 함수로, 특정 CompositionLocal에 값을 할당하는 데 사용됩니다. provides 함수는 CompositionLocal에 새로운 값을 연결하여 해당 값이 CompositionLocalProvider의 범위 내에서 사용될 수 있도록 합니다. infix 메서드란?Kotlin에서 infix 함수는 중..
1. 프로젝트 개요일당직 근로자들이 일한 내역을 기록하고, 월급 명세와 비교할 수 있도록 도와주는 앱입니다. 소규모 공장, 봉제 업종 등에서 근무하는 근로자들은 출근 기록 시스템 없이 스스로 일한 내역을 기록해야 하며, 때때로 총무 부서의 실수로 일당이 누락되거나 차이가 발생할 수 있습니다.이 앱은 단순한 다이어리 이상의 기능을 제공하며, 근로자들이 일한 내용을 정확히 기록하고, 각 월급 명세서와 비교할 수 있는 기능을 갖추고 있습니다.액셀로 해당 데이터를 관리할수도있지만 안드로이드로 앱을 제공하여 편리하게 사용할수 있도합니다.2. 주요 기능사업장 생성 및 관리사용자가 일한 사업장을 생성하고, 각 사업장에 따라 분류할 수 있도록 합니다.사업장별로 일한 내역을 기록할 수 있으며, 사업장추가, 수정, 삭제..
ViewModel을 활용하여 데이터를 Flow나 LiveData로 보유하고 View에서 요청 시 또는 ViewModel 초기화 시 Model에서 데이터를 받아와 View가 이를 관찰하는 방식은 보통 MVVM 패턴에서 사용하는 방법입니다. 하지만 여기서 혼란이 생기기도 하는데, 이 ViewModel이 MVVM 패턴에서의 ViewModel인지, 아니면 AAC(Android Architecture Components)에서 제공하는 ViewModel인지 헷갈릴 수 있습니다. 두 클래스는 명확한 차이가 있으며, 이를 아는 것이 Android 앱 개발에 도움이 됩니다. 1. MVVM 패턴에서의 ViewModelMVVM(Model-View-ViewModel)은 Microsoft에서 고안된 디자인 패턴입니다. 이 패턴..
안드로이드에서는 싱글 스레드 모델로 UI 업데이트가 이루어집니다. 이 모델에 따라 UI는 메인 스레드에서만 업데이트할 수 있으며, 다른 스레드에서 UI를 수정하려고 하면 버그가 발생할 수 있습니다. 이런 싱글 스레드 모델은 UI의 무결성을 보장하기 위한 것으로, 메인 스레드만이 UI 작업을 처리할 수 있도록 함으로써 스레드 간의 충돌이나 데이터 일관성 문제를 방지합니다. 따라서, 메인 스레드를 무거운 작업으로 블로킹하는 경우 ANR(Application Not Responding) 오류가 발생해 앱이 강제 종료될 수 있으므로 주의해야 합니다. 네트워크 작업과 같이 시간이 오래 걸리는 작업은 별도의 백그라운드 스레드에서 처리해야 합니다. 하지만, 백그라운드 스레드에서 UI를 업데이트할 필요가 생길 때가 있..
안드로이드에서 스레드와 코루틴 둘다 비동기 처리에 도움이 된다고 알고있을것입니다. 코루틴이 더 가볍고 스레드안에 여러개있을수 있기에 그렇다고 인지하고만 있을수도 있습니다. 그래서 이번 포스팅에서는 왜 코루틴이 빠른진 스레드와 코루틴의 차이가 무었이고 언제 사용이 되는지 작성해볼까 합니다. 스레드는 프로세스 하위에 종속되는 보다 작은 단위입니다. 각 스레드는 독립된 메모리 영역인 스택 을 갖습니다. 그스택은 프로세스의 독립된 메모리 영역인 힙안에서 배치되어있으며 각 스레드는 다른 스레드에게 스레드는 메모리를 공유 할수 없지만 힙은 그렇지 안습니다. 그렇기에 스레드를 블로킹하여 다른 스레드를 기다리는 동작등을 수행할때 context swiching을 통해 동작중인 스레드를 바꿀수 있는것이지요 안드로이드..
기존의 필자는 테스트라고 하면 해당 기능을 개발하고 나서 앱을 실행하여 해당 메서드의 결과를 보거나 로그나 디버깅을 통해 앱을 체크하는 UI 테스트의 형태로 개발을 하였습니다. 그러다 TDD라는 개발 방식을 알게 되었습니다. TDD란 Test Driven Development의 약자로, ‘테스트 주도 개발’이라고 명합니다. 기존의 개발 프로세스가 디자인 → 개발 → 테스트 순서였다면, TDD는 개발에 앞서 테스트케이스를 작성하는 프로세스를 가집니다. 이게 어려운 말이 아닙니다.실패가되는 테스트 케이스라는 게 실패가 되는 시나리오를 만드는 겁니다. 클래스나 인터페이스의 없는 함수를 호출하고 해당 함수의 결과를 테스트합니다. 이러한 테스트는 실패될 수밖에 없습니다. 그러니 이 함수나 기능이 성공할 수 있..
MVVM 환경에서 카카오 로그인을 하려고 하였습니다.안드로이드 환경에서 카카오 로그인을 구현하기 위해서는 카카오 SDK 를 사용합니다. 카카오 로그인을 하는 방법은 크게 2가지로 나뉩니다.앱 로그인 , 계정 로그인 이 2가지가 있는데//앱 로그인UserApiClient.instance.loginWithKakaoTalk(context) { token, error ->}//계정(이메일) 로그인UserApiClient.instance.loginWithKakaoAccount(context) { token, error ->} 이코드를 보면 알다시피 context를 필요로 합니다. 이게 액티비티의 context를 사용하면 문제가 없지만 ViewModel에서 Application의 context를 사용하였을때 문제..
학습 목표: 안드로이드에서 통합 테스트 작성법 학습학습 항목:Android Instrumentation 개념 이해Espresso를 활용한 UI 테스트 기본View와 ViewModel을 함께 테스트하는 방법Activity, Fragment 통합 테스트통합 테스트는 여러 구성 요소(Activity, ViewModel, Repository 등)가 서로 상호작용하는 방식과 기능을 검증하는 테스트입니다. 안드로이드에서 통합 테스트를 할 때 Android Instrumentation과 Espresso를 활용하여 Activity와 ViewModel의 상호작용을 테스트하는 것이 중요한 부분입니다. 여기서 통합 테스트는 UI와 관련된 부분을 포함하거나 포함하지 않을 수 있지만, 핵심은 애플리케이션 컴포넌트 간의 상호작용..
학습 목표: 안드로이드에서 비즈니스 로직을 검증하는 단위 테스트 작성법 학습학습 항목:JUnit 기본 개념 및 구조안드로이드에서 JUnit 4와 JUnit 5 사용법Mocking과 Stubbing: Mockito 활용예외 상황 처리 테스트1. JUnit 기본 개념 및 구조JUnit은 자바 기반의 테스트 프레임워크로, 안드로이드에서는 주로 비즈니스 로직의 단위 테스트에 사용됩니다.1.1. JUnit의 기본 주기설정(Setup): 테스트 전에 초기화 작업을 수행합니다. 일반적으로 @Before 어노테이션을 사용하여 테스트 환경을 설정합니다.테스트 실행(Test): 테스트가 진행됩니다. 각각의 테스트 메서드는 @Test 어노테이션으로 정의됩니다.정리(Teardown): 테스트가 완료된 후, 자원을 해제하거나 ..
학습 목표: 소프트웨어 테스트의 중요성, 기본 원칙 이해학습 항목:소프트웨어 테스트의 목적안드로이드에서의 테스트 필요성테스트 피라미드 (단위 테스트, 통합 테스트, UI 테스트)1. 소프트웨어 테스트의 목적소프트웨어 테스트는 개발 중 또는 완료된 소프트웨어가 예상대로 작동하는지 확인하는 과정입니다. 주요 목적은 다음과 같습니다:버그 발견: 프로그램의 문제점을 찾아내는 과정.품질 보증: 소프트웨어가 요구사항에 맞는 품질 수준을 유지하는지 확인.신뢰성 향상: 테스트를 통해 신뢰성을 높여 사용자에게 신뢰할 수 있는 제품을 제공.비용 절감: 초기 테스트를 통해 나중에 발생할 수 있는 큰 문제를 미리 예방.테스트는 소프트웨어 개발의 필수적인 단계이며, 제품의 완성도를 높이고 유지보수 비용을 줄이는 데 중요한 역할..