여러 영상들이나 문제들을 볼 때 Flow를 많이 보았습니다. 그렇지만 그 당시 Flow를 잘 몰랐기에 해당내용을 이해하기 쉽지 않았습니다. 그래서 오늘은 이 Flow를 알아볼까 합니다. 리액티브 프로그래밍은 기존의 명령형 프로그래밍과 대응되는 방식입니다.명령형 프로그래밍 : 데이터를 요청한 후 일회성으로 수신. 이경우 데이터가 필요할 때마다 결괏값을 매번 요청한다는 점에서 매우 비효율적입니다.리액티브 프로그래밍 : 구독을 하면 지속적으로 데이터를 전달하는 역할을 함. 이렇게 전달이 되는 흐름을 데이터 스트림이라고 합니다. Coroutine Flow는 코루틴 상에서 위에서 말한 리액티브 프로그래밍을 지원하기 위해 만들어진 구현체입니다. 코루틴에서 데이터 스트림을 구현하기 위해서는 Flow를 이용하여 구..
https://seedpotato.tistory.com/276 [Effective Kotlin] 10. 안정성 - 단위 테스트(Unit Test)를 만들어라안드로이드 스튜디오를 사용하다 보면 이런 화면을 본 적이 있을 겁니다. 이곳은 단위테스를 하는 공간입니다. 그렇다면 단위테스트는 또 무엇일까요? 이번 포스팅에서는 단위테스트 무엇인지seedpotato.tistory.com이전에 책을 보다 보니 단위 테스트를 주제로 책의 내용이 진행되었습니다. 그 부분을 다 읽고 난생각은 단위테스트 어떻게 작성해야 되는가입니다. 단위 테스트가 좋은 것을 책을 봐서 알고 있습니다. 그렇다면 단위 테스트를 작성하는 문법과 양식은 무엇이고 실습을 해보며 포스팅을 진행해 보겠습니다.코틀린의 단위 테스트를 작성하고 실행하는 가장..
코틀린의 경우 여러 종류의 반복문이 있습니다. 이러한 반복문들은 2가지로 나눌 수 있습니다. for나 while 같은 예약어로 구성된 반복문과 repeat, foreach 같은 함수형 반복문이 있습니다. 오늘은 이 함수들을 알아보고 이반복문들의 비교를 해보도록 하겠습니다. 예약어 for for(i in Iterable){} 가장 기본적인 반복문입니다. 연속적인 값(Iterable)들을 순환하며 해당 값들을 i에 넣고 연속적인 값들의 크기만큼 순환합니다. while, do while while(조건){} do {} while(조건) 조건이 참일 경우에만 반복하는 반복문입니다. do while은 최소한번은 실행한다는 차이점이 있습니다. 함수형 반복문 repeat repeat(){} @kotlin.intern..
알고리즘 문제들을 풀다 보면 해당 조합에 대해서 교집합 합집합 차집합들을 물어보는 문제가 많습니다. 코틀린은 이러한 요구들을 해결해 줄 수 있는 여러 함수들을 가지고 있습니다. 오늘은 그 함수들을 알아볼까 합니다. 합집합(union) public infix fun Iterable.union(other: Iterable): Set { val set = this.toMutableSet() set.addAll(other) return set } 이처럼 mutableSet을 이용하여 2가지 연속적인 객체의 값들을 모두 넣어 Set자료형으로 반환하는 함수입니다. 교집합(intersect) public infix fun Iterable.intersect(other: Iterable): Set { val set = ..
안들로이드로 네트워크 작업을 하다 보면 이 Result클래스를 보곤 했습니다. 이름으로 봤을 때는 이게 대충 결과겠거니 하면서 여러 네트워크 Api의 양식서에 있는 것을 보며 넘어갔습니다. 이번 포스팅에서는 이 Result 클래스가 무엇인지 알아볼까 합니다. Result class는 두 가지로 나눌 수 있을 것 같습니다. 사용자 지정 Result runCatching의 반환값으로 이용되는 Result 사용자 지정 Result sealed class Result class Success(val result: T): Result() class Failure(val throwable: Throwable): Result() fun divide(a: Int, b: Int): Result { return if (b..
오늘은 함수들을 열어보다 처음 보는 예약어를 발견했습니다. contract { returns() implies value } 그렇기에 오늘은 이 예약어들을 알아볼까 합니다. Contract의 기능 fun String?.isNotNull(): Boolean = this != null fun foo(s: String?) { if (s != null) s.length if (s.isNotNull()) s?.length // No smartcast :( } 공식문서에서는 contact가 기존의 스마트케스팅을 할 때 해당 스코프를 나가게 될 경우 스마트 캐스팅이 되지 않았던 점이 있었습니다. 그래서 코틀린은 1.3 버전부터 해당기능을 지원하는 contract 함수를 이용할 수 있게 되었습니다. 이 함수의 장점은 ..
오늘을 코틀린의 시퀀스(Sequence)를 알아볼까 합니다. 시퀀스 한국말로 해석하면 수열입니다. 수열은 수가 나열된 것을 말합니다. 코틀린에서도 이와 비슷하게 리스트처럼 수들을 가지고 있을 수 있습니다. 그렇다면 코틀린은 리스트도 있는데 왜 시퀀스를 만들었을까요. 그것은 시퀀스만의 장점이 있기 때문입니다. 시퀀스의 특징에 대한 설명에 앞서 하나의 코드를 보여주겠습니다. //1번 val list = "it is a test code".split(" ") val conversionList = list.filter { it.length > 1 }.map { "[$it]" }.take(2) println(conversionList.joinToString(" "))//[it] [is] println() //2번..
언어마다 필수적으로 리스트나 맵 셋 같은 자료형들을 모아놓은 자료구조들을 지원합니다. 이러한 용소들은 대부분의 언어에서 필수적입니다. 오늘은 그 많은 자료구조 중 Kotlin의 Collection을 알아볼까 합니다. 구조로는 기본적으로 mutable이 붙지 않은 List, Set, Map과 Mutable이 붙은 MutableList, MutableSet, MutableMap이 있습니다. 기본적인 이 List나 Set,Map같은 경우에는 한번 정의하게 되면 값을 추가하거나 삭제할 수 없습니다. 그렇지만 MutableCollection과 List,Set,Map을 상속받은 MutableList, MutableSet, MutableMap 같은 경우 중간에 값을 추가할 수 있습니다. val list = listO..