안드로이드

    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 - Image Preloading Trouble Shooting

    Android - Image Preloading Trouble Shooting

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

    Android - JUnit 단위 테스트

    Android - JUnit 단위 테스트

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

    안드로이드 - csv 파일 읽기

    안드로이드 - csv 파일 읽기

    오늘은 아래 사이트의 opencsv라는 라이브러리를 이용해 csv 파일을 읽어오는 방법에 대해 알아 보겠습니다. https://mvnrepository.com/artifact/com.opencsv/opencsv build.gradle(Module)에서 아래와 같이 의존성을 추가해줍니다. implementation 'com.opencsv:opencsv:5.6' 그 후 asset 폴더를 아래와 같이 생성 후 읽어 올 csv 파일을 넣어 줍니다. 제가 읽어올 파일은 동물 병원 정보가 담긴 csv 파일 입니다. assets 파일을 읽기 위해서는 assetManager를 사용해야 합니다. open을 통해 inputStream을 가져온 후 CSVReader에 inputStreamReader를 사용해서 읽어들입니다...

    안드로이드 액티비티간 화면 전환 및 데이터 전달 (Intent) - Kotlin

    안드로이드 액티비티간 화면 전환 및 데이터 전달 (Intent) - Kotlin

    MainActivity에서 SubActivity로 전환 해주기 위해서 SubActivity를 만들어 주어야 합니다. 프로젝트 파일에서 왼쪽 클릭을하여 Empty Activity를 생성해줍니다. Activity Name과 Layout Name은 편하실대로 지어주시면 됩니다. Main Activity에서 Sub Activity로 넘어가주기 위해서 버튼을 하나 배치해줍니다. 전환될 Sub Activity도 아래와 같이 배치 해줍니다. 인제 전환될 화면 구성이 완료 되었으니 코드를 작성해 주어야 겠죠? 우선 뷰 바인딩을 위해 아래와 같이 설정 해줍니다. build.gradle (Module)에 들어가서 buildFeatures안에 view Binding true로 설정해줍니다. class MainActivity..

    [Android ]Progress Bar - Kotlin

    [Android ]Progress Bar - Kotlin

    build.gradle (Module)에서 viewBinding true 설정 프로그래스 바를 아래와 같이 배치를 해주고 MainActivity.kt UI 작업은 MainTread에서 해주어야 하기 때문에 아래와 같이 코드를 작성 합니다. class MainActivity : AppCompatActivity() { val binding by lazy { ActivityMainBinding.inflate(layoutInflater)} override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) thread(start=true){ // 서브 스레드 Thread...