전체 글
[Kotlin Coroutine] 생명주기를 인식하여 안전하게 코루틴 사용하기
Kotlin 코루틴은 비동기 코드를 작성할 수 있게 하는 API를 제공한다. Kotlin 코루틴을 사용하면 코루틴이 실행되어야 하는 시기를 관리하는 데 도움이 되는 CoroutineScope 를 정의할 수 있다. 수명 주기 인식 코루틴 범위 ViewModelScope ViewModelScope 는 앱의 각 ViewModel 을 대상으로 정의한다. 이 범위에서 시작된 모든 코루틴은 ViewModel 이 삭제되면 자동으로 취소된다. ViewModel 이 활성 상태인 경우엠나 실행해야 할 작업이 있을 때 유용하다. class MyViewModel: ViewModel() { init { viewModelScope.launch { // Coroutine that will be canceled when the Vi..
[Kotlin Coroutine] LiveData, StateFlow, SharedFlow
StateFlow vs SharedFlow StateFlow StateFlow는 현재 상태와 새로운 상태 업데이트를 내보내는 Observable 상태 홀더 flow이다. value 속성을 통해서 현재 상태 값을 읽을 수 있으며 상태를 업데이트 하고 전송하려면 MutableStateFlow 클래스의 value 속성에 새 값을 할당한다. 값이 업데이트 된 경우에만 반환하고 동일한 값은 반환하지 않는다. Flow는 일반적으로 Cold Stream 이지만, StateFlow는 Hot stream이다. 식별 가능한 변경 가능 상태를 유지해야 하는 클래스에 적합하다. Sunflower 프로젝트 내 Stateflow 예시) @HiltViewModel class PlantListViewModel @Inject inte..
[Kotlin Coroutine] Cold Stream vs Hot Stream
코루틴을 알아가기 시작했고 Scope와 flow, channel 등 여러 API를 알아오셨을겁니다. 많은 포스팅에서 보셨듯이 flow는 cold stream, channel은 hot stream이라는 것을 알고 계실겁니다. Stream이란? [사전적 용어] 줄줄[계속] 흐르다 줄을 지어 이어지다 라는 사전적 용어를 가집니다. 흔히 안드로이드에서 비동기작업을 진행할 때 어떤 방식의 데이터 흐름을 만들지 선택하게 됩니다. Cold Stream 하나의 소비자(Consumer)에게 값을 보낸다 생성된 이후에 누군가 소비하기 시작하면 데이터를 발행한다 예) 상태가 변하지 않는 값을 읽을 때(DB를 읽거나 URL을 통해 서버 값을 읽는 경우) Hot Stream 하나 이상의 소비자(Consumer)에게 값을 보낸다..
[Android 12] Android12 대응 에러
안드로이드 12 대응하던 중 일어난 에러에 대해 작성해보겠습니다. 안드로이드 12에서 대응해야 할 점은 크게 2가지입니다. 1. Manifest에서 exported 처리 & 외부 패키지 명시 exported 처리는 간단합니다. Menifest에서 해당 액티비티를 호출하는 곳이 나의 앱 내부인지, 외부인지에 따라서 true, false를 적어주시면 됩니다. 아래 링크에서 더 자세히 볼 수 있습니다. https://codechacha.com/ko/android-12-intent-filter-explicit-exported/ 2. Pending Intent 처리 java.lang.IllegalArgumentException: com.kakao.beauty.hairshop.sandbox: Targeting S+..
[Kotlin] 1. Kotlin의 정적 타입 지정 언어
2022.01.21 - [Kotlin] - [Kotlin] 2. 함수형 프로그래밍을 지원하는 코틀린의 핵심 개념 코틀린은 정적 타입 지정 언어이다. 정적 타입 지정(statically typed) 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때 마다 컴파일러가 타입을 검증해준다는 뜻. ↔ 동적 타입(dynamically typed) 지정 언어 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메소드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 하지만 반대로 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생(runtime..
[Kotlin] 2. 함수형 프로그래밍을 지원하는 코틀린의 핵심 개념
2022.01.21 - [Kotlin] - [Kotlin] 1. Kotlin의 정적 타입 지정 언어 함수형 프로그래밍과 객체지향 프로그래밍 자바 개발자라면 객체지향(Object oriented)프로그래밍의 핵심 개념을 잘 이해하고 있을 것인데, 함수형 프로그래밍은 새로운 개념일 것이다. 함수형 프로그래밍의 핵심 개념 일급 시민(first-class)함수 함수(프로그램의 행동을 나타내는 코드 조각)를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 ㅅ ㅜ있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어 반환할 수 있다. 불변성 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다. 부수효과 없음 함수형 프로그..
[알고리즘] 11047번: 동전 0
https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net fun main() { var result = 0 val sc: Scanner = Scanner(System.`in`) var (coin, price) = readLine()!!.split(' ').map(String::toInt) var coinList = arrayOfNulls(coin) for (i in 0..coinList.l..
[Android] ViewPager2 내부 RecyclerView 중첩 스크롤
문제 : Horizontal ViewPager2 내부에 ScrollView(RecyclerView)가 존재할 떄. 예를 들어, ViewPager2의 orientaion: Horizontal ScrollView(RecyclerView) orientation : Horizontal 로 같을 때. 부모 뷰 (ViewPager2)에 포커싱이 되어 자식뷰의 스크롤이 먹히지 않거나 혼선이 생기는 경우가 발생한다. 자식뷰에 터치 이벤트가 발생했을 때 우선적으로 스크롤을 인식할 수 있도록 도와주는 NestedScrollableHost 라는 애가 있다. 구글 Migrate from ViewPager to ViewPager2 가이드에 보면 중첩 스크롤 가능 요소 지원 ViewPager2는 스크롤 보기가 포함된 ViewPa..