안드로이드에서는 싱글 스레드 모델로 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. 소프트웨어 테스트의 목적소프트웨어 테스트는 개발 중 또는 완료된 소프트웨어가 예상대로 작동하는지 확인하는 과정입니다. 주요 목적은 다음과 같습니다:버그 발견: 프로그램의 문제점을 찾아내는 과정.품질 보증: 소프트웨어가 요구사항에 맞는 품질 수준을 유지하는지 확인.신뢰성 향상: 테스트를 통해 신뢰성을 높여 사용자에게 신뢰할 수 있는 제품을 제공.비용 절감: 초기 테스트를 통해 나중에 발생할 수 있는 큰 문제를 미리 예방.테스트는 소프트웨어 개발의 필수적인 단계이며, 제품의 완성도를 높이고 유지보수 비용을 줄이는 데 중요한 역할..
안드로이드 앱을 개발하다 보면 여러 이슈가 생깁니다. 그 이슈를 확인하고 고치기를 반복하다. 개발 중에 test를 한다면 이러한 이슈를 줄일 수 있을 것이라 확신하여 테스트 기법을 공부하고 실습하여 성장하고자 합니다. 이러한 부분을 구글링을 통해 Test와 관련된 정보들을 찾으려하였지만 단편적인 정보들만있있습니다. 그래서 gpt로 앱 개발 시 테스트에 대해 학습할 수 있는 커리큘럼을 제공받아 그커리큘럼대로 체계적으로 학습을 해볼까 합니다.1. 테스트 개념 이해 및 중요성학습 목표: 소프트웨어 테스트의 중요성, 기본 원칙 이해학습 항목:소프트웨어 테스트의 목적안드로이드에서의 테스트 필요성테스트 피라미드 (단위 테스트, 통합 테스트, UI 테스트)2. JUnit을 이용한 단위 테스트학습 목표: 안드로이드에서..
1. EditText TextWatcher로 검색처리 과부하 리펙토링안드로이드 EditText에서는 TextWatcher를 이용하여 내부의 값 변경이 될 경우 listener를 추가하여 알맞은 동작을 구현할 수 있습니다. 대부분이 상황에는 검색이나 text의 원화표시 같은 동작을 추가합니다. 기존의 NoteApp 같은 경우에도 리사이클러뷰의 적용된 어댑터에서 searchNotes라는 함수를 호출하여 검색 처리를 하고 있습니다.이 코드 자바로 구현되어 있으며 해당 작업은 Timer를 이용하여 비동기처리를 하고 있습니다. 이 코드는 여러 이슈가 생길 수 있습니다. textWatcher에서 바로 해당 작업을 실행하기에 기존의 Timer는 참조되지 않지만 여전히 실행될 것입니다. 그렇지만 타이머를 취소하지 않습..
https://www.youtube.com/playlist?list=PLam6bY5NszYN6-a1wt7yRISWfmYPdkbMu Android App Development | Notes App | Android StudioHello, in this tutorial series we are going to build an android app called: Notes App. This tutorial series is going to be a FREE complete Android developmen...www.youtube.comChirag Note App을 클론 코딩해 보았습니다.사용 기술스택구분원본리펙토링언어JAVAKotlinUIxmlxml디자인패턴MVCMVVM아키텍처 패턴패키징클린아키텍처DI없음..