전체 글

I’m currently learning Android, ComputerScience, Algorithm and etc....
Android/Study

[Android] JUnit4으로 테스트 코드 작성하기

오늘은 테스트에 대해서 공부를 해보자. Junit4란 JUnit은 Java 프로그래밍 언어용 단위 테스트 프레임워크 중 하나이며, 안드로이드 앱의 테스트에도 널리 사용된다. 안드로이드에서는 JUnit 4가 주로 사용되며, 이를 활용하여 단위 테스트 및 통합 테스트를 작성할 수 있다. 테스트 코드를 작성하는 이유 자동화된 테스트 실행: JUnit4를 사용하면 테스트를 자동으로 실행할 수 있다. 안드로이드 스튜디오나 빌드 도구를 통해 테스트를 쉽게 실행하고 결과를 확인할 수 있다. 이는 반복적인 테스트를 통해 개발자가 신속하게 피드백을 받을 수 있게 해주며, 코드 변경 사항에 대한 신뢰성을 높일 수 있다. 안정성 및 신뢰성 확보: JUnit4를 사용하면 안드로이드 앱의 여러 부분에 대한 단위 테스트를 작성할..

Android/Study

[Android] Room이란

오늘은 Room에 대해서 공부를 해보자. Room이란 Android에서 Room은 SQLite 데이터베이스를 쉽게 다룰 수 있도록 도와주는 지원 라이브러리이다. 안드로이드에서 앱의 데이터를 저장하는 방법은 크게 파일, 데이터베이스, 프리퍼런스로 나뉜다. 그 중 데이터 베이스 프로그래밍을 이용하여 안드로이드 폰에서 DB를 관리하는 오픈소스 SQLite 가 있다. Room은 SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite에 추상화 계층을 제공한다. Realm에 비해서 낮은 용량(약 64KB)을 가지면서 꽤 괜찮은 성능과 쉽게 사용할 수 있다는 장점이 있다. Room의 구성요소 Entity(엔터티): 엔터티는 데이터베이스의 테이블을 나타내는 클래스이다. 각 엔터티는 데이터베..

BaekJoon

[BaekJoon] 3190번 뱀 (Java) 문제 풀이 [Gold 4]

문제 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 어떻게 풀 것인가? 구현, 시뮬레이션 문제이다. 하지만 생각할 것이 많아서 어려운 문제였다. 시간을 재고, 뱀 이동하기 범위를 벗어나거나, 뱀 몸통 만날 때 종료 사과가 있을 때 없을 때 처리 방향을 바꿔주는 시간을 만날 때 방향 변경 현재값 업데이트 위와 같은 로직을 While문을 통해서 반복해야한다. 답안 코드를 본다면 너무나도 쉽지만, 생각을 코드로 옮긴다는 것은 어려운 일인 것 같다. 풀면서..

Programming Language/Kotlin

[Kotlin] Flow Retry 연산자

Kotlin Flow에서 연산자를 사용하여 작업을 재시도하는 방법에 대해서는 두 연산자가 있다. retryWhen retry retryWhen retryWhen의 정의 fun Flow.retryWhen(predicate: suspend FlowCollector.(cause: Throwable, attempt: Long) -> Boolean): Flow 그리고 다음과 같이 사용한다. .retryWhen { cause, attempt -> } 여기에는 다음과 같은 두 가지 매개변수가 있다. cause : cause는 예외의 원인을 제공하는 변수이다. 만약에 함수가 진행하면서 예외가 발생한다면 어떤한 예외인지를 나타낸다. attempt : 현재 시도를 나타내는 변수이다. 0부터 시작한다. 예를 들어, 작업을 ..

Programming Language/Kotlin

[Kotlin] Dispatchers in Kotlin Coroutines

코루틴에서 사용할 수 있는 Dispatcher 유형을 포함하여 Kotlin 코루틴의 Dispatcher 에 대해 알아보자. Dispatchers 이란 Dispatchers는 코루틴이 작업을 수행해야 하는 스레드를 결정하는 데 도움을 준다. 우리는 특정 작업을 효율적으로 수행하기 위해 코루틴을 사용한다. 코루틴은 특정 스레드에서 작업을 실행한다. 여기가 Dispatcher가 등장하는 곳이다. 코루틴은 작업을 수행해야 하는 스레드를 결정할 때 Dispatcher의 도움을 받는다. Kotlin 코루틴에는 4가지 유형의 Dispatcher가 있다. Dispatchers.Default Dispatchers.IO Dispatchers.Main Dispatchers.Unconfined Dispatchers.Defau..

Programming Language/Kotlin

[Kotlin] Flow zip 연산자로 long- running tasks in parallel 처리하기

Kotlin Flow의 zip 연산자란 Zip 연산자는 지정된 함수를 통해서 두 흐름 컬럭션의 방출을 함께 결합하고 이 함수의 결과를 기반으로 각 조합에 대해 단일 항목을 방출하는 연산자이다. 예제 코드 val flowOne = flowOf(1, 2, 3) val flowTwo = flowOf("A", "B", "C") flowOne.zip(flowTwo) { intValue, stringValue -> "$intValue$stringValue" }.collect { println(it) } 출력 1A 2B 3C Android의 실제 사용 사례 두 작업을 병렬로 실행하고 두 작업이 모두 완료되면 단일 콜백에서 두 작업의 결과를 원하는 경우 장기 실행 작업 1 private fun doLongRunning..

BaekJoon

[BaekJoon] 13023번 ABCDE (Java) 문제 풀이 [Gold 5]

문제 https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 어떻게 풀 것인가? DFS를 이용한 간단한 문제 풀이였다. 그래서는 이중연결리스트를 이용하여 연결된 친구사이를 표현한 뒤에 재귀를 이용한 DFS로 문제를 풀었으며 DFS를 통해서 노드를 쭉쭉 연결해 나아갔을때 status변수를 이용하여 만약 깊이가 5라면 true 그것이 아니라면 false를 반환하는 식으로 문제를 해결했다. 풀면서 놓쳤던점 그래프 탐색이라고 하면 항상 BFS만 이용하였기에 DFS는 익숙하지 않아서 애를 많이 먹었다. 이 문제를 통해 얻어갈 것 재귀를 이용한 DFS 문제 풀이 내 ..

Programming Language/Kotlin

[Kotlin] Flow Builder를 사용하여 Flow 만들어보기

저번 포스팅에 대한 보충 내용 https://superohinsung.tistory.com/318 [Kotlin] Kotlin에서 Flow Api 코틀린 Flow Api에 대해서 공부를 해보자. Kotlin Flow Api란 비동기적인 연산을 처리하기 위한 새로운 프로그래밍 모델을 제공하는 Kotlin의 라이브러리이다. Flow는 비동기적인 작업을 쉽게 처리하고 superohinsung.tistory.com 한 위치에서 다른 위치로 파일 이동 여기서는 백그라운드 스레드의 한 위치에서 다른 위치로 파일을 이동하기 위해 Flow Builder를 사용하여 흐름을 생성하고 메인 스레드에서 완료 상태를 보낸다. val moveFileflow = flow { // move file on background thre..

Programming Language/Kotlin

[Kotlin] Kotlin에서 Flow Api

코틀린 Flow Api에 대해서 공부를 해보자. Kotlin Flow Api란 비동기적인 연산을 처리하기 위한 새로운 프로그래밍 모델을 제공하는 Kotlin의 라이브러리이다. Flow는 비동기적인 작업을 쉽게 처리하고 조절할 수 있도록 설계되었으며, 주로 비동기 스트림(Asynchronous Streams)을 다루는데 사용된다. Flow API의 핵심 개념은 데이터의 비동기적인 흐름(Flow)을 나타내는 것이다. Flow는 값을 생성하고 소비하는 비동기적인 프로시저로, 여러 개의 값을 비동기적으로 생산하고 소비할 수 있다. 이는 코루틴과 함께 사용되어 비동기 코드를 더 간결하게 만들고 복잡성을 줄일 수 있다. Flow의 주요 구성 요소 Flow Builder 작업을 수행하고 아이템을 방출하는데 도움이 된..

Programming Language/Kotlin

[Kotlin] Kotlin Coroutines에서 Launch 와 Async

오늘은 Kotlin Coroutines에서 Launch 와 Async에 대해서 알아보자. launch와 async는 모두 Kotlin에서 코루틴을 시작하는 기능이다. 차이점은 launch는 실행하면 결과 값을 전달하지 않는 반면 , async는 반환 결과 를 얻기 위해 Java에서 future를 사용하는 것처럼 코루틴의 결과를 반환하는 함수가 Deferred있는 의 인스턴스를 반환한다는 것이다. Launch val job = GlobalScope.launch(Dispatchers.Default) { // do something and do not return result } 작업 상태를 가져오거나 취소하는 데 사용할 수 있는 작업 개체를 반환한다. 위의 실행 예에서 우리는 무언가를 해야 하고 결과를 반환..

Android/Study

[Android] abstract class를 이용하여 ViewBinding을 쉽게 사용하기

지난 프로젝트에 대한 회상 겸 정리할 겸 작성을 해보았다. (물론 너무 오랜 시간이 지나긴했지만...) 프로젝트를 진행하였을 때 ViewBinding을 일일히 Activity마다 혹은 Fragment마다 설정하는 것이 너무나도 귀찮았다. 그래서 추상화 클래스를 이용하여 ViewBindingActivity 그리고 ViewBindingFragment을 개발하였다. 결과적으로 효율적으로 ViewBinding을 사용할 수 있었으며, 문제가 생긴다면 위 2 클래스를 확인하면 되는 효율적임이 생겼다. 우선 ViewBinding이란 아래 포스팅 링크를 남기겠다. https://superohinsung.tistory.com/239 [Android] ViewBinding(뷰 바인딩) 정리 ViewBinding(뷰 바인딩..

Android/Study

[Android] ListAdapter에서 DiffCallBack 정리

블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자 저번에 RecyclerView에 대해서 포스팅을 하였을 때 https://superohinsung.tistory.com/314 [Bong#] RecyclerView에서 onCreateViewHolder와 onBindViewHolder의 차이 블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자. 졸업 프로젝트에서는 다른 여타 프로젝트와 달리 superohinsung.tistory.com 아래와 같은 코드를 본 적이 있을 것이다. companion object { private val diffC..

Tenacity_Dev
인성의 개발 공부 노트