Kotlin

    [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)에게 값을 보낸다..

    [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..

    [Kotlin] HashSet

    HashSet이란? Set은 중복을 허용하지 않는 자료구조로, 순서대로 입력되지 않고 일정하게 유지되지 않는게 특징이다. HashSet은 null 요소도 허용한다. 가장 큰 특징은 중복을 허용하지 않는 것. 중복을 걸러내는 과정 HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode() 메소드를 호출하여 해시코드를 얻어 낸 다음 저장되어 있는 개체들의 해시 코드와 비교한 뒤 같은 해시 코드가 있다면 equals() 메소드로 두 객체를 비교하여 같은 객체라면 중복 저장을 하지 않는다. 예제 fun main() { val hashSet = hashSetOf(1,2,3,4,5) hashSet.add(-1) hashSet.add(0) hashSet.add(-3) print(hashSet) // [-1..