본문 바로가기
반응형

Android 개발/Kotlin15

vararg 로 가변 인자를 전달하는 방법 #Kotlin Kotlin에서 n개의 가변되는 인자를 전달하는 방법은 어떻게 표현할 수 있을까요? 오늘은 이 방법에 대해서 정리해 보도록 하겠습니다. 1. 가변인자 가변인자는 인자의 수가 유동적인 경우에 사용하는 데요. 쉽게 생각할 수 있는 곳이, 바로 Room Persistence Library를 이용해서, insert를 사용하는 경우입니다. 사용하는 방법은 아래와 같이 인자앞에 vararg라는 지시어를 사용해 붙여서 사용해 줍니다. 어디에 사용하는지는 알았는데, 실제로 어떻게 n개의 인자를 넣어줄 수 있을까요? 아래와 같이 들어온 인자들에 for in 문을 사용해 줄 수 있습니다. 이렇게 하면, 기존처럼 list를 인자로 받을 필요가 없어지는데요. 들어온 input 인자는 Array객체로 해당하는 메소드들을 모두 .. 2020. 5. 11.
Coroutine을 이용해 Parallel한 네트워크 호출 #Kotlin Kotlin의 Coroutine을 이용하여서 NetworkCall을 할 경우, 동시에 2개 혹은 3개의 네트워크 API를 호출해야 할 경우 어떻게 해야 할까요? 당연히 A를 먼저하고 끝나면 B를 하는 Sequential한 방법은 사용하지 않을 것이구요. Parallel하게 동시에 호출한 다음 return된 값들을 이용할 텐데요. 오늘은 이것의 방법에 대해서 정리해 보도록 하겠습니다. 1. async와 successHandler Paralllel하게 호출하여 비동기로 결과 값을 받기 위해서는, async 코루틴 빌더를 사용하여야 하는데요. 1-1. async와 successHandler의 사용 동시에 2개의 호출을 한다고 가정해 보겠습니다. 임의의 successHandler를 만들어서 async빌더에서 r.. 2020. 3. 28.
Coroutine의 Async와 await 사용시 Exception Handling에 관하여 #Kotlin Coroutine을 사용하면서 한가지 주의해야 할 부분이 있는데요. Async와 await메소드를 사용할 때, Exception Handling에 관한 부분입니다. 오늘은 이것에 관해서 정리해 보겠습니다. 1. await와 Exception Handling Async와 await를 사용하면 예상하지 못한 방식으로 Exception이 catch가 되지 않고, app이 Crash가 나는 현상이 발생하는데요. 참고로 이것은 공식문서에서와 같이 GlobalScope를 사용하면 발생하지는 않는 문제입니다. 다만, GlobalScope를 실제 프로덕트에서 사용하는 경우는 많지 않을 것이기 때문에, 이경우는 제외하였습니다. 코드를 보면서 문제를 파악해 보도록 하겠습니다. 아래와 같이 async블록에서 IOExcept.. 2020. 2. 16.
Sealed Class에 대해서 알아보자 오늘은 Kotlin의 Sealed Class에 대해서 알아보도록 하겠습니다. Sealed Class는 진화된 Enum클래스라고 하시는 분도 있는데요. 공식문서에도 어떤 면에서는 Enum 클래스의 확장이라고도 설명하고 있습니다. 1. Enum vs Sealed Class Sealed Class에 대해서 잘 이해하기 위해서, Enum클래스와 비교를 해 보면 시작하겠습니다. 둘다 타입을 제한적으로 사용하고자 할때 많이 사용하게 되는데요. Enum에서는 특정 값을 single instance로서 하나의 객체만 제한적으로 사용할 수 있으며, 생성자의 형태도 동일해야만 합니다. 이에 반해, Sealed Class에서는 state(상태 값)을 포함하고 있는 여러개의 instance를 가질 수 있구요. 생성자도 각각의.. 2020. 1. 21.
Kotlin으로 Android개발 하기 구글에서 "Kotlin First"를 말하기도 하였고, 공식문서도에서도 Kotlin을 예제로 보여주기도 하는 등, Kotlin의 시대라고 해도 과언이 아닌데요. 여전히 기존 Java프로젝트와 호환되지 않거나 특별한 방법을 추가해야 하는 경우도 있고, 혹은 Android 프레임워크의 특성상 Kotlin을 이용해, 더 쉽게 사용할 수 있는 방법들이 있는데요. 오늘은 Kotlin으로 Android를 개발하면서 알아야 하거나, 주의해야 할 부분들에 대해서 정리해 보겠습니다. 1. kapt Kotlin에서 Java의 Glide나 Dagger의 Annotation Processing을 사용하기 위해서는 kapt compiler plugin을 사용해야 하는데요. 특히나 Glide는 개인적으로는 모든 프로젝트에 사용되.. 2019. 10. 22.
Kotlin Coroutine에 대한 정리 이제 안드로이드 개발을 하면서, RxJava나 AsyncTask이외에도 다른 Thread로 작업을 할 수 있는 방법이 생겼는데요. 바로 Kotlin의 Coroutine입니다. Coroutine은 RxJava만큼 다양한 Operator를 제공해주지는 않지만, 심플하다는 면에서는 좀 더 좋은면이 있는 것 같습니다. 오늘은 이 Coroutine에 대해서 정리해 보도록 하겠습니다. 1. 라이브러리 implement 가장 먼저 해야할 것은 역시 Library설정인데요. Kotlin의 버전을 최신 버전으로 하구요. 아래와 같이 app레벨의 build.gradle에서 implement해 줍니다. 마치 rxjava와 rxandroid를 같이 implement했듯이, coroutine도 core와 android 라이브러.. 2019. 10. 9.
Kotlin Extension Functions에 대해서 정리해 봅니다. 오늘은 Kotlin의 매우 중요한 개념인 Extension Functions에 대해서 정리해 보려고 하는데요. 특히 Java에서 Kotlin으로 넘어오면서, 개인적으로는 코드의 가독성과 개발자의 생산성을 높여주는 부분이라고 생각이 들었습니다. 그럼 하나씩 보도록 하겠습니다. 1. Extension Functions Extention의 뜻은 연장 혹은 확장인데요. 이름에서 알 수 있듯이, 기존 Class에 함수를 추가할 수 있도록 하는 기능입니다. 무엇보다도 상속받거나 특별한 디자인 패턴을 쓰지 않으면서, 기존의 Class에 안전하게 함수를 추가시킬 수 있다는 점이 큰 장점인데요. 동시에 코드도 매우 간결해져서 읽기도 매우 쉬워집니다. 이 글에서는 개념적인 설명보다는, 실제로 구현하는 코드등을 보면서 정리.. 2019. 10. 7.
Kotlin에서 활용하는 Generic Java에서와 마찬가지로 Kotlin도 Genenric을 지원하는데요. 오늘은 Kotlin에서의 Generic에 대해 정리해 보겠습니다. 1. Class에서의 Generic Generic이라고 하는 것은, class 혹은 함수를 사용하는 시점에, class 또는 함수에서 사용할 타입을 지정할 수 있도록 하는 것 인데요. 코드를 보면서 알아보도록 하겠습니다. 아래 코드를 보면, 먼저 클래스이름 다음에 라는 타입을 정해서 붙여 주었는데요. 여기가 Generic타입을 정하는 위치입니다. Return값의 타입을 나타내는 곳과는 다른 곳 이지요. 클래스를 정의한 다음, Person클래스를 객체화 String혹은 Int로 객체화 하였는데요. 처음에는 외부에서 String이라는 타입을 정해 주고 "goodBoy"라는.. 2019. 10. 6.
코틀린의 Scope Function(let, with, run, apply, also)을 알아보자 이번에는 Scope 함수 라는 것을 정리해 보고자 합니다. 이 함수들은, 객체의 컨텍스트를 유지하면서, 코드 블록을 받아서 실행시키는데요. let, apply, with, run, also 같이 종류가 무려 5개나 됩니다. 이 함수들은 대부분 중요해서 android개발하면서 계속 마주치게 되므로, 잘 정리해서 사용해 보는 것이 좋은데요. 이 글에서는 5가지 Scope함수와 더불어 함께 사용할 수 있는 함수인, takeIf그리고 takeUnless까지 같이 정리해 보겠습니다. 1. Scope Functions ScopeFunction이라는 함수명에서 알 수 있듯이, 이 함수들을 lambda식을 이용해서 호출하면, 일시적인 Scope(범위)가 생기게 됩니다. 이 범위안에서는 객체에 대해 "it" 혹은 "th.. 2019. 9. 29.
Kotlin을 배워보자 part5 (Object Expression and Declaration, Companion Object) 지난 part4에서는 Data Class, Nested Class와 Inner클래스에 대해서 정리해 보았습니다. 이전 글은 아래링크를 클릭해주세요 >> Kotlin을 배워보자 part4 (Data Class, Nested and Inner Class) 이번 part5에서는 익명 inner class에 사용되는 Object Expression, Singleton패턴을 위한 Object Declaration 그리고 Java의 Static 함수를 대신하기 위해 사용하는 Companion Object 에 대해 정리해 보겠습니다. 1. Object Expression and Declaration 1-1. Object Expression 특정타입으로부터 상속받는 Anonymous inner 클래스를 만들 때 Obj.. 2019. 9. 28.
Kotlin을 배워보자 part4 (Data Class, Nested and Inner Class) 지난 part3에서는 Class와 생성자, 프로퍼티 그리고 상속 등에 대해서 정리해 보았는데요. 이번 글에서는 Data Class, Nested Class와 Inner클래스에 대해서 알아보도록 하겠습니다. 이전 글은 아래 링크를 참조해 주시면 됩니다. >> Kotlin을 배워보자 part3 (Class, Constructor, 상속) 1. Data Class 코틀린에서는 데이터만 보관하는 용도로 쓰는 클래스를 제공해 주고 있는데요. 선언하는 방법도 매우 간단한데, data키워드를 class 앞에 붙여주고 기본 생성자에서 1개 이상의 property를 선언해 주면 됩니다. 1-1. data클래스의 특징 data클래스임을 명시적으로 표시하면, 기본적으로 아래의 함수들을 자동으로 생성해 줍니다. 꽤나 많은 함.. 2019. 9. 27.
Kotlin을 배워보자 part3 (Class, Constructor, 상속) 벌써 kotlin에 대해 정리한 글의 part3가 되었네요. 이전 part2에서는 if, when, for, array, list, ranges에 대해서 정리해 보았는데요. 이번 글에서는 class와 생성자 그리고 상속에 대해서 정리해 보도록 하겠습니다. 혹시 이전글을 보시지 못한 분들은 아래 링크를 참조해 주세요. >> Kotlin을 배워보자 part2(if, when, for, while, array, list, ranges) 1. Class와 생성자 코틀린에서 클래스를 만들기 위해서 class라는 키워드를 사용하구요. 클래스의 객체를 생성할 때 Java에서 쓰던 new연산자는 사용하지 않습니다. 아래 코드에서는 자동차 클래스를 이용해 차 객체를 만들어 준 다음, 자동차를 생성할 때 같이 생성된 Ti.. 2019. 9. 26.
Kotlin을 배워보자 part2(if, when, map, for, while, array, list, singleOrNull, ranges, return with label) 이전 글에서 변수선언 방법, Basic Types, Null, 함수, Interpolation, Lamdas, Type Check와 SmartCast 및 형변환에 대해서 정리해 보았는데요. 이번 글 에서는 if, when 등의 conditional과 for, array나 list, ranges에 대해서 다루도록 하겠습니다. 이번 글 이해를 위해서는 이전 글에서 다루고 있는 주제들에 대한 이해가 필요하니, 필요하신 분들은 아래 링크를 참조해 주세요. >> Kotlin을 배워보자 part1(Basic Types, Function, Null, 타입 변환, Lambda) 먼저 if문에 대해서 보도록 하겠습니다. 1. If if나 if else를 Java에서 사용하던 방법은 Kotlin에서도 동일한데요. 아래 이.. 2019. 9. 25.
Kotlin을 배워보자 part1(Basic Types, Function, Null, 타입 변환, Lambda, 고차함수, Elvis, inline) 2017년 5월에 공식적으로 안드로이드 언어로 채택된 Kotlin은, Java의 virtual Machine인 JVM에서 동작하는 컴파일 언어입니다. 2019 IO를 보면 Kotlin First, Kotlin/Everywhere라는 단어가 보입니다. 구글의 안드로이드 공식문서에서도 Java보다 kotlin 예제코드를 먼저 보여주기 시작 했구요. 점점 많은 개발자들이 안드로이드의 실제 프로덕트에 적용하며 추천하고 있기도 합니다. 이러한 Kotlin에 대해서, 이번 글을 시작으로 5part에 걸쳐 정리해 보겠습니다. 그럼 가장 먼저 변수선언에 대해서 정리해 보도록 하겠습니다. 1. 변수 선언을 위한 val과 var 변수 혹은 상수를 선언하는 방법에 대해서 알아보도록 할텐데요. Java에서는 상수의 경우 fi.. 2019. 9. 24.
Kotlin(코틀린)의 Sequence에 대해 알아보자 Kotlin에서 List를 사용하는 경우 map이나 filter등의 메소드를 이용해서 원하는 결과를 쉽게 얻을 수 있는데요. 퍼포먼스 측면에서 한가지 생각해야 할 점이 있습니다. 함수를 거칠 때 마다, 매번 list가 연산되어서 반환되기 때문에, list아이템이 매우 많을 경우, 메소드를 거칠 수록 처리에 대한 부담이 커지게 되는 것인데요. 그런데, sequence의 경우는 lazy하게 최종 메소드가 실행될 때 전체가 실행되어 집니다. 따라서 list에서 iterator가 하듯, 매번 list를 반환에서 넘겨주지 않아도 되므로, 부하가 적어지게 되는 것인데요. 오늘은 이 Sequence에 대해서 정리해 보도록 하겠습니다. 1. Sequence Sequence를 생성하기 위해서는 아래와 같은 방법을 사용하.. 2019. 8. 16.