Android

    Android - UseCase 추상화

    Android - UseCase 추상화

    사이드 프로젝트를 진행하면서 Domain Layer의 비지니스 로직을 수행하는 각 UseCase의 리팩토링 필요성을 느끼게 되었다. 위 사진에 보이는 UseCase들은 API 응답을 받아 데이터 스트림을 방출하는 역할들을 하는데 개발을 하다보니 invoke 메서드의 코드들이 전부 중복되는 문제가 있었다. 아래 두 코드에서 확인할 수 있듯이 단순히 결과를 받아와 데이터 스트림을 방출하는 역할만 수행한다. 문제가 모든 UseCase 코드들이 같은 구조로 되어 있다. class GetToys @Inject constructor( private val toyLibraryRepo: ToyLibraryRepository ) { operator fun invoke(): Flow = channelFlow { toyLi..

    Android - CustomView

    Android - CustomView

    커스텀 뷰란? 기본적으로 제공되는 뷰 컴포넌트를 사용자의 필요에 맞게 확장하거나 새로 정의하여 사용자 인터페이스를 정의하는 방법이다. 언제 사용되는 걸까? 기본적인 뷰들로는 표현하기 어려운 복잡한 사용자 인터페이스를 구현할 때 (복잡한 애니메이션 효과, 정밀한 조작이 필요할 때) 안드로이드 표준 뷰에서 제공하지 않는 사용자 인터렉션을 구현할 필요가 있을 때 ex) 멀티 터치를 사용하는 그림판, 복잡한 제스처를 인식하는 인터페이스를 구현할 때 기존 뷰에 없는 기능을 추가하거나 기존 뷰의 동작 방식을 변경해야할 때 ex) Buttom에 추가적인 그래픽 효과 적용, TextView에 특별한 텍스트 렌더링 로직을 추가하는 경우 일반적인 UI 요소를 여러 프로젝트에서 재사용하려는 경우 CustomView를 만들어..

    Android - Image Preloading Trouble Shooting

    Android - Image Preloading Trouble Shooting

    (Blinking Issue 발생) 360도 차량 이미지를 보여주는 기능 요구사항으로 인해, 이미지 60장을 한번에 불러와서 보여주는 프리로딩 기능을 구현하던 중 이미지 몇장이 깜박 거리는 현상이 발생했다. Coil의 Image Loader를 활용해 프리로딩 기능을 구현하던 중 이미지가 깜박 거리는 문제가 발생했다. 문제의 원인을 분석하기 위해 Log를 찍어 봤지만 서버에서 이미지 60장을 다 불러오고 프로그레스 바가 끝나기 때문에 문제가 없어 보였지만 여전히 이미지가 깜박거리는 현상이 발생했다. (문제 공유 및 페어프로그래밍을 통한 원인 분석) 데일리 스크럼때 해당 이슈를 공유하고 나서 혼자 문제 원인을 분석하던 중 프론트엔드 팀원분이 오셔서 함께 페어 프로그래밍 해보자고 제안을 하셨고 절박했던 나는 ..

    안드로이드 - Jetpack Compose Navigation Test Code

    오늘은 Jetpack Navigation의 Test Code 작성하는 법에 대해 알아 보겠습니다! 우선 테스트 코드 작성을 위해 아래 의존성을 추가해 줍니다. dependencies { implementation("androidx.navigation:navigation-compose:$nav_version") androidTestImplementation("androidx.compose.ui:ui-test-junit4:$junit_version") } 테스트 코드 작성 시작하기 앞서 해당 테스트는 안드로이드 기기에서 실행되어야 하므로 /app/src/androidTest 폴더 안에 위치해 있어야 합니다. 우선 이해하기 쉽게 아래 두 화면과 NavHost가 정의되어 있다고 가정하겠습니다. sealed cl..

    Android - JUnit 단위 테스트

    Android - JUnit 단위 테스트

    유닛 테스트란? 소프트웨어 개발에서 가장 작은 단위의 코드를 독립적으로 테스트하는 접근 방법이다. 함수, 클래스, 메서드등과 같이 작은 코드 조각을 테스트하여 코드의 동작을 확인하고 검증하는 프로세스이다. 유닛 테스트를 하는 목적은 아래와 같다. 코드의 정확성 확인: 메서드의 입력과 예상되는 출력을 기반으로 테스트 케이스를 작성하고 실행함으로써 코드의 정확성 검증 버그 탐지: 코드의 작은 부분을 테스트하면서 예기치 못한 동작이나 예외 상황 또는 버그를 찾아낼 수 있다. 코드의 유연성 향상: 작은 단위로 테스트 코드를 작성하면 코드의 결합도가 낮아지고 모듈화된 구조를 가지게 된다. Junit? Junit은 자바를 위한 테스팅 프레임워크이다. 안드로이드에서 유닛 테스트를 수행할 때 가장 범용적으로 사용되는 ..

    Android - GitHub에 API Key, Hash 값 숨기기

    Android - GitHub에 API Key, Hash 값 숨기기

    1. gitignore 파일 수정 자신의 github 레포지토리에 들어가 Android Studio 프로젝트의 gitignore 파일을 수정해주어야 합니다. API 키를 local.properties 안에다가 저장 시킬것 이므로 위와 같이 gitignore에 local.properties를 추가해줍니다. 또한 /build 경로에는 BuildConfig가 존재하고 이 안에 API키를 변수로 저장하기 때문에 /build 또한 gitignore에 추가해 줍니다. 2. local.properties 인제 안드로이드 스튜디오에서 local.properties 파일을 아래와 같이 수정해줍니다. sdk 경로 아래에 자신이 숨기고 싶은 중요한 키 값, 해쉬 값등 데이터를 선언해줍니다. 2. build.gradle (:..