본문 바로가기

전체 글

(54)
[Kotlin] Extension Function (확장 함수) 안녕하세요.코틀린이 제공하는 유용한 기능으로 확장 함수가 있습니다. 오늘은 확장 함수 선언과 테스트 방법에 대해 알아보도록 하겠습니다.확장 함수Kotlin의 확장 함수 (Extension Function) 는 기존 클래스의 코드를 수정하지 않고도,그 클래스에 새로운 함수를 추가하는 기능입니다. fun String.isPalindrome(): Boolean { return this == this.reversed()}fun main() { val word1 = "madam" val word2 = "hello" println("${word1.isPalindrome()}") // true println("${word2.isPalindrome()}") // false} 확장 함수는 ..
[Benchmark] Java Static vs Kotlin Companion Object 안녕하세요.이번에 자바 -> 코틀린으로 리펙토링 작업을 진행 중 입니다.자바 코드를 코틀린으로 바꾸면서 두 코드 간의 성능 차이가 궁금해졌고,직접 분석해보고 싶어서 안드로이드 스튜디오에서 벤치마크 하는 방법을 찾아봤습니다.Microbenchmark벤치마크에는 두 종류가 있습니다.Microbenchmark : 작은 단위 또는 개별 컴포넌트의 성능을 측정Macrobenchmark : 큰 단위 또는 전체 성능을 측정 내가 원하는 부분만 빠르게 테스트해보고 싶어서 Microbenchmark를 사용하기로 결정했습니다. Android Developers 사이트에서 제시하는 benchmark 방법이 하나 나와있습니다.아래 페이지를 따라 세팅하면 벤치마크를 돌릴 수 있는 환경이 마련됩니다.https://develope..
[Unit Test] MockK (1) - Mock, Spy 안녕하세요.오늘은 코틀린에서 사용하는 모킹 프레임워크, MockK에 대해 알아보도록 하겠습니다.MockK?Mock + Kotlin의 합성어 입니다. MockMock 객체는 실제 객체를 대신하여 가짜 객체를 불러온 뒤, 특정 동작을 지정할 수 있는데 사용됩니다.이러한 행위를 모킹 (mocking) 이라고 합니다. 의의실제 객체의 의존성을 제거하고, 테스트를 독립적이고 쉽게 제어할 수 있는 기술입니다. 아래는 의존성이 있는 클래스 예시입니다.class Server { fun getGrade(user: User): String { return when { user.getScore() >= 90 -> "A" user.getScore() >= 80 -> "..
[Kotlin] Null Safety 안녕하세요.이번에 회사에서 Java 언어를 Kotlin으로 바꾸면서 고민하고 찾아봤던 내용을 기반으로 작성했습니다. 그 중 Null 처리에 관해 고민을 많이 했었습니다.그래서 오늘은 Kotlin의 Null Safety에 대해 알아보고 어떻게 이를 적용했는지 알아보겠습니다.Null 처리기존 자바 코드의 NullException을 캐치하는 try - catch 문을 그대로 코틀린으로 가져와서 Not-Null 연산만 덧붙이고 끝내고 싶었습니다.fun printModelLength(model: String?) { try { val length = model!!.length println("The length of the model string is: $length") } ca..
[Unit Test] JUnit5 (2) - Parameterized Test 안녕하세요.Parameterized Test에 대해서 알아보겠습니다.Parameterized TestParameterized Test란 여러 세트의 데이터를 사용하여 동일한 테스트 메서드를 여러 번 실행할 수 있게 하는 기능입니다.반복적인 테스트 코드를 줄일 수 있는 장점이 있습니다.다양한 입력에 대해 테스트를 쉽게 수행할 수 있는 장점이 있습니다. AnnotationParameterized Test를 사용하는 주요 어노테이션으로는 아래와 같습니다.@ParameterizedTest : 파라미터 테스트 메서드를 나타냄@ValueSource : 단일 값 배열을 제공함@CsvSource : 여러 Csv 값을 제공함@MethodSource : 메서드를 통해 테스트 데이터를 제공함@ArgumentsSource :..
[Unit Test] JUnit5 (1) - Use in Android Studio 안녕하세요.Unit Test 프레임워크 중 하나인 JUnit5에 대해 알아보겠습니다.JUnit5JVM 기반 언어에서 단위 테스트를 작성하고 실행하는데 사용되는 프레임워크입니다.그래서 Java, Kotlin 언어로 개발할 때 테스트 프레임워크로 가장 많이 사용됩니다.JUnit5 in Android StudioJUnit5를 안드로이드 스튜디오에서 사용하는 방법에 대해 알아보겠습니다,언어는 Kotlin을 사용할 것입니다.(버전은 다를 수 있으니 체크해주세요) build.gradle (app 수준)android { ... testOptions { unitTests.includeAndroidResources = true } ...}dependencies { // JUnit ..
[Kotlin] Coroutine (3) - 예외 처리 안녕하세요. 코루틴 예외 처리에 대해 알아보겠습니다. 사전 지식 코루틴에서 예외 처리는 기존의 예외 처리와는 조금 다른 방식으로 처리합니다. 코루틴은 비동기적으로 동작하고 여러 스레드 간에 분산되어 있을 수 있기 때문에 몇 가지 고려할 사항이 있습니다. 코루틴 구조 코루틴은 계층 구조를 가집니다. 호출한 코루틴은 자식 코루틴이 됩니다. 예외 전파 예외가 발생하면 기본적으로 부모로 전파하게 됩니다. 예외가 발생하면 해당 코루틴은 물론, 자식 코루틴의 작업이 전부 cancel 됩니다. job5에서 예외가 발생하면 job2 -> job1 까지 예외가 전파됩니다. ⇒ 최종적으로 job1을 루트로 하는 subtree 내의 모든 코루틴의 실행이 취소됩니다. 예외 처리 방법 try-catch launch 안의 코드에..
[Kotlin] Coroutine (2) - Use in Kotlin 안녕하세요. 코틀린에서 코루틴을 사용하는 방법에 대해 알아보겠습니다. 스케줄러의 코루틴 관리 스케줄러가 코루틴을 suspend & resume 해서 관리합니다. suspend 현재 코루틴 실행을 일시 중지하고 모든 로컬 변수를 저장합니다. resume 정지되었던 위치부터 정지된 코루틴을 재개합니다. 비동기 작업을 하고 싶으면 suspend 키워드를 함수 앞에 붙여주면 됩니다. suspend fun doSomething() { ... } Dispatcher Dispatcher는 코루틴이 실행되는 스레드 또는 스레드 풀을 관리하는 개념입니다. Kotlin은 코루틴을 어떤 스레드에서 실행할지 정하는데에 사용할 수 있는 3가지 dispatcher를 제공합니다. Dispatchers.Main android 기본 ..