HOME > kotlin

KotlinTest로 Unit Test 작성하는 방법

접근(가시성)제한자는 객체가 공개되어야 하는 범위를 정해주는 역할을 합니다. 코틀린은 자바와 유사하게 private, protected, internal, public의 접근(가시성, Visibility)제한자를 제공합니다. 코틀린의 접근 제한자에 대해서 자세히 알아보겠습니다.

17 Jul 2019

Kotlin - Collection 소개 및 사용법 정리

Collection(콜렉션)은 대부분의 프로그래밍 언어에서 지원하는 자료구조입니다. Collection은 List, Map, Set 등이 있고 Generic으로 구현이 되어 다양한 타입과 함께 사용될 수 있습니다. 코틀린의 Collection은 기본적으로 Mutable(변할 수 없는)과 Immutable(불변의)을 별개로 지원합니다.

12 Jul 2019

Kotlin - Data class 이해 및 구현 방법

데이터 클래스(Data class)는 데이터 보관 목적으로 만든 클래스를 말합니다. 데이터 클래스는 프로퍼티에 대한 toString(), hashCode(), equals(), copy() 메소드를 자동으로 만들어 줍니다. 또한 Destructuring Declarations를 지원합니다.

11 Jul 2019

Kotlin - Generics 클래스, 함수를 정의하는 방법

제네릭스(Generics) 클래스 및 함수를 정의하는 방법에 대해서 알아보고, Invariance(불변성)과 Covariance(공변성), Contravariance(반공변)에 대해서 알아보겠습니다. Generics는 클래스나 함수를 정의할 때 타입을 확실히 정하지 않는 것을 말합니다. 그렇기 때문에 다양한 타입으로 클래스를 여러개 정의하지 않아도 됩니다.

07 Jul 2019

Kotlin에서 자주 사용하는 annotation 정리

코틀린에서 자주 사용되는 @JvmName, @JvmStatic, @JvmField, @Throws, @JvmOverloads 등의 annotation들을 정리하였습니다. 코틀린은 JVM에서 동작하고 자바와 함께 사용되는 경우가 많기 때문에 이런 annotation들이 간혹 보입니다. 이런 annotaiton들을 알고 있다면 자바와 코틀린을 함께 사용하는데 도움이 될 수 있습니다.

07 Jul 2019

Kotlin - lateinit과 Delegates.notNull의 차이점

lateinit과 Delegates.notNull는 초기화를 늦추고 객체에 null이 들어가지 않게 합니다. 비슷해보이지만 여러가지 차이점이 있습니다. 또한 내부적인 구현이 다르기 때문에 성능차이가 발생할 수도 있습니다. 이 글에서 이 둘의 특징과 구현의 차이점에 대해서 알아보겠습니다.

04 Jul 2019

Kotlin - Delegates로 프로퍼티를 Observerable로 만들기

코틀린의 Delegates는 프로퍼티를 Observerable로 쉽게 만들어주는 기능을 제공합니다. Observerable은 변수가 변경되었을 때, 변경되었다고 알려주는 기능입니다. Delegates를 이용하면 자동으로 코드를 생성해주는 부분이 많기 때문에 매우 편리합니다. 코틀린 코드를 자바로 변환하여 내부적으로 어떻게 동작하는지 알아보겠습니다.

15 Jun 2019

Kotlin - Null을 안전하게 처리하는 방법 (Null safety, 널 안정성)

코틀린은 자바와 다르게 Nullable과 Non-nullable 타입으로 프로퍼티를 선언할 수 있습니다. Non-nullable 타입으로 선언하면 객체가 null이 아닌 것을 보장하기 때문에 null check를 할 필요가 없습니다. Nullable과 Non-nullable 타입의 차이점과 null 처리 방법에 대해서 알아보겠습니다.

15 Jun 2019

Kotlin - lateinit과 lazy로 초기화를 지연하는 방법

lateinit과 lazy는 코틀린에서 프로퍼티 초기화를 늦추는 키워드입니다. 초기화 지연은 사용할지 모르는 데이터를 미리 초기화할 필요가 없어서 성능 향상에 도움이 됩니다. 코틀린에서 제공하는 Late init과 Lazy init에 대해서 소개하고 공통점과 차이점에 대해서 알아보겠습니다.

12 Jun 2019

Kotlin - 함수에 가변인자 전달하는 방법

가변인자는 개수가 정해지지 않은 인자를 말합니다. 인자가 유동적이라면 인자 개수만큼 함수도 오버로딩해야 합니다. 하지만 가변인자를 이용하면 함수를 하나만 만들어도 됩니다. 예제를 통해 코틀린에서 가변인자를 사용하는 방법에 대해서 알아보겠습니다.

10 Jun 2019

Kotlin - Infix functions 알아보기

Infix 함수는 두개의 변수 가운데 오는 함수를 말합니다. 코틀린에서 기본적으로 정의된 Infix 함수들 중에 Pair를 만드는 `to`가 있습니다. Infix 함수를 사용하는 방법과, 사용해서 얻게되는 장점에 대해서 알아보겠습니다. 또한 Infix 함수를 정의하는 방법에 대해서 알아보겠습니다.

07 Jun 2019

Kotlin - Pair와 Triple 사용 방법

함수는 1개의 객체만 리턴합니다. 하지만 Pair와 Triple을 사용하면 2개 또는 3개의 객체를 함수가 리턴할 수 있습니다. Pair는 두개의 객체를 저장할 수 있는 객체이고, Triple은 3개의 객체를 저장하는 객체입니다. 어떻게 Pair와 Triple을 사용하는지 자세히 알아보겠습니다.

07 Jun 2019

Kotlin - 확장 함수(Extension functions)에 대해서 알아보기

Extension functions는 기존에 정의된 클래스에 함수를 추가하는 기능입니다. 자신의 함수는 쉽게 추가가 가능하지만 다른 살마이 만든 라이브러리를 갖다 쓸때는 매우 어렵습니다. 코틀린은 이런 것을 쉽게 할 수 있도록 도와줍니다. 그것이 바로 확장 함수입니다. 자세히 알아보겠습니다.

06 Jun 2019

Kotlin - by로 Delegate Pattern 쉽게 구현하기

Delegate Pattern은 Composition을 이용하는 일반적인 패턴입니다. Composition 객체의 함수가 많아지면 형식적인 코드(boilerplate code)를 많이 작성해야 할 수 있는데요. 코틀린은 by라는 키워드를 이용하여 적은 코드로 적용할 수 있도록 지원하고 있습니다. 예제를 통해 자세히 알아보겠습니다.

02 Jun 2019

Kotlin - object와 class 키워드의 차이점

코틀린에서 클래스를 정의하는 키워드는 class입니다. 만약 object로 클래스를 정의하면, 싱클턴(Singleton) 패턴이 적용되어 객체가 한번만 생성되도록 합니다. 싱글턴으로 사용하는 방법 외에도, object는 익명객체를 생성할 때도 사용됩니다. 예제를 통해 두개의 차이점에 대해서 알아보겠습니다.

01 Jun 2019

Kotlin을 Java로 변환(decompile)하는 방법

코틀린은 JVM에서 동작하기 위해 바이트코드로 변환됩니다. 바이트 코드를 자바로 decompile하면 코틀린이 어떻게 동작하는지 보기 쉽습니다. 이 글에서 jadx와 IntelliJ를 이용하여 디컴파일하는 방법에 대해서 모두 알아보겠습니다.

24 Mar 2019

Kotlin - Date에 년,월,일을 더하고 빼는 방법

Date에 날짜를 더하는 다양한 방법에 대해서 알아보겠습니다. Date 객체에 월, 일을 추가하는 방법을 알아보겠습니다. 그리고 두개의 Date 객체를 더하는 방법을 알아보겠습니다. Date는 1970년을 기반으로 측정된 시간이기 때문에 `Calendar`를 이용하여 날짜 연산을 하였습니다.

22 Mar 2019

Kotlin - 현재 날짜 및 시간 가져오는 방법

현재 날짜 및 시간을 가져오고 다양한 형식으로 출력하는 것을 알아보겠습니다. 이 글의 예제는 LocalDateTime와 DateTimeFormatter을 사용하여 날짜 및 시간을 출력하였습니다. 또한 DateTimeFormatter를 사용하여 다양한 형태로 날짜를 출력하고, 또는 자신이 원하는 형태로 날짜를 출력하도록 하였습니다.

22 Mar 2019

Kotlin - String을 파싱하여 LocalDate로 변환하는 방법

LocalDate와 DateTimeFormatter 라이브러리를 이용하면 문자로 된 날짜를 Date 객체로 변환할 수 있습니다. 스트링을 Date객체로 변환하면 날짜 계산 등 데이터를 처리하는데 편리합니다. 예제를 통해 어떻게 문자열을 LocalDate 객체로 변환할 수 있는지 알아보겠습니다.

22 Mar 2019

Kotlin - 현재 작업 디렉토리(Working directory) 구하는 방법

프로그램 실행 중에 현재 작업 디렉토리를 가져올 수 있습니다. 첫번째는 System.getProperty("user.dir")로 작업 디렉토리에 대한 경로를 가져오는 방법이고, 두번째는 현재의 상대경로를 절대경로로 변환하는 방법이 있습니다. 두가지 방법에 대해서 알아보겠습니다.

22 Mar 2019

Kotlin의 접근 제한자(Visibility Modifiers)에 대해서 알아보기

접근(가시성)제한자는 객체가 공개되어야 하는 범위를 정해주는 역할을 합니다. 코틀린은 자바와 유사하게 private, protected, internal, public의 접근(가시성, Visibility)제한자를 제공합니다. 코틀린의 접근 제한자에 대해서 자세히 알아보겠습니다.

17 Mar 2019

Kotlin의 Scope functions(let, run, with, apply, also)에 대해서 알아보기

Scope functions는 let, run, with, apply, also를 말합니다. Scope functions는 객체에 접근하는 방법을 쉽게 해 줍니다. 이런 함수들을 이용하면 코드가 간결해지고, 가독성을 높여줄 수 있습니다. 위의 5개 함수들은 매우 비슷하지만 차이점이 있습니다. 자세히 알아보겠습니다.

16 Mar 2019

Kotlin - 프로퍼티(Property)를 정의하는 다양한 방법

코틀린에서, 클래스에 val/var로 정의되는 변수를 프로퍼티라고 합니다. 프로퍼티는 자바의 field + getter + setter 메소드라고 볼 수 있습니다. 프로퍼티를 생성하면 getter와 setter가 자동으로 생성되기 때문입니다. 프로퍼티에 대해서 자세히 알아보겠습니다.

13 Mar 2019

Kotlin - 클래스 생성자(Constructor)와 get/set 메소드 정의 방법

자바는 멤버변수를 field라고 하지만 코틀린 프로퍼티라는 용어를 사용합니다. 자바는 생성자를 꼭 정의해야 하지만 코틀린은 생략이 가능합니다. 자바는 생성자를 꼭 정의해야 하지만 코틀린은 생략이 가능합니다. 코틀린의 클래스 정의 방법을 알아보고 자바와의 차이점들에 대해서 알아보겠습니다.

12 Mar 2019

Kotlin - 클로저(Closure)에 대해서 간단히 알아보기

클로저(Closure)는 outer scope(상위 함수의 영역)의 변수를 접근할 수 있는 함수를 말합니다. 코틀린은 클로저를 지원하기 때문에 익명함수는 함수 밖에서 정의된 변수에 접근할 수 있습니다. Closure라는 말은 `close over`에서 왔습니다. 예제를 통해 클로저가 무엇인지에 대해서 알아보겠습니다.

11 Mar 2019

Kotlin - 기본 인자(Default arguments)에 대해서 알아보기

기본 인자(default parameters)는 인자의 값이 default로 설정되는 것을 말합니다. JAVA의 경우 동일한 메소드 이름에 인자를 하나 추가하려면, 오버로딩하여 새로운 메소드를 만들어야 합니다. 하지만 코틀린은 기본인자를 제공하기 때문에 오버로딩을 할 필요가 없습니다. 자세히 알아보겠습니다.

09 Mar 2019

Kotlin - 람다 표현식(Lambda expression)에 대해서 알아보기

쉽게 말하면 람다는 익명함수입니다. 익명함수는 함수의 이름이 없는 함수를 말합니다. 보통 한번 사용되고 재사용되지 않는 함수를 만들때 익명함수로 만듭니다. 람다함수를 사용하면 코드 가독성이 높아지고, 매우 간단하여 함수형 프로그래밍에서 자주 사용하는 패턴입니다. 자세히 알아보겠습니다.

09 Mar 2019

Kotlin - 일급함수(First-class functions)에 대해서 알아보기

일급함수는 객체로 취급되는 함수를 의미합니다. 최근에 만들어진, 함수형 프로그래밍을 지원하는 언어들은 대부분 일급함수를 지원하고 있습니다. 일급함수는 고차함수(Higher-order-functions), 람다표현식(Lambda expression) 등을 이해하는데 알아야하는 개념입니다. 일급함수의 특성에 대해서 알아보겠습니다.

08 Mar 2019

Kotlin - 고계함수(Higher-Order Functions)에 대해서 알아보기

고계(고차)함수는 함수의 인자로 함수를 넘기거나, 함수를 리턴하는 함수를 말합니다. 고차함수를 이해하려면 먼저 일급함수를 알아야 합니다. 일급함수를 지원한다는 의미는 고차함수를 사용할 수 있다는 의미입니다. 예제를 통해 고차함수에 대해서 자세히 알아보겠습니다.

08 Mar 2019

Kotlin - 함수를 정의하는 다양한 방법 알아보기

코틀린에서 함수를 정의하는 여러가지 방법과 특성에 대해서 알아보겠습니다. 코틀린은 완전히 함수형 프로그래밍 언어는 아니지만 최근에 생긴 언어답게 함수형 언어의 특징을 갖고 있습니다. 또한, 자바와 비슷하지만 자바보다 함수 정의 방법에 대해서 더 많은 자유도를 줍니다.

06 Mar 2019

Kotlin - 재귀함수로 Factorial 구현하기

Factorial은 `n!`으로 표현하며 1부터 n까지의 숫자를 모두 곱하는 것입니다. 간단히 루프를 이용하여 factorial을 구현할 수 있습니다. 다른 방법으로 재귀함수로도 factorial을 구현할 수 있습니다. 두가지 방법에 대해서 알아보겠습니다.

26 Feb 2019

Kotlin - 재귀함수로 Fibonzcci(피보나치)수열 구현하기

피보나치 수열은 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열입니다. 루프를 이용하여 간단히 구현할 수 있습니다. 다른 방법으로 재귀함수를 이용하여 구현할 수도 있습니다. 두가지 방법에 대해서 알아보겠습니다.

26 Feb 2019

Kotlin - companion object로 static 메소드, 객체 정의하기

kotlin에는 static 메소드, 객체를 정의하려면 companion object를 사용해야 합니다. static이란 키워드를 제공하지 않기 때문입니다. companion은 Companion이라는 정적(static) 객체를 생성하고 그 객체 안에 변수를 생성합니다. 코틀린에서 어떻게 자바의 static과 같은 변수를 선언할 수 있는지 알아보겠습니다.

25 Feb 2019

Kotlin - 중첩 클래스(Nested classes)에 대해서 알아보기

코틀린의 중첩(nested) 클래스는 클래스 안에 있는 클래스를 말합니다. 크게 Static nested class(정적 중첩 클래스)와 Non-static nested class(inner class라고 합니다, 비정적 중첩 클래스)로 나눌 수 있습니다. 자바와 코틀린의 코드를 비교하면서 중첩 클래스들에 대해서 설명하겠습니다.

24 Feb 2019

Kotlin - tailrec(꼬리재귀)에 대해서 알아보기

tailrec은 꼬리재귀(tail recursive)라는 의미로, 추가 연산 없이 재귀적으로 호출하다가 어떤 값을 리턴하는 함수를 의미합니다. 재귀함수를 루프로 변경하면 좋은 점은 재귀로 인해 소비되는 스택을 아낄 수 있다는 점입니다. 코틀린의 tailec 키워드를 이용하면 재귀를 루프로 변경할 수 있습니다.

23 Feb 2019

Kotlin 설치 방법 및 빌드환경 구축하기

코틀린 코드를 컴파일하는 방법을 소개합니다. 코틀린을 배우기 전에 먼저 빌드 환경을 구축해야 합니다. REPL, Terminal, IntelliJ를 이용하여 코틀린을 컴파일할 수 있습니다. 빌드 환경을 구축할 수 있는 3가지 방법에 대해서 모두 알아보겠습니다.

27 Nov 2018

Android에서 코틀린으로 쉽게 파일을 탐색하는 방법

코틀린으로 안드로이드의 External stroage를 탐색하여 epub 파일을 찾는 코드를 구현하였습니다. File(path).walk().forEach()를 이용하면 재귀적으로 모든 파일을 탐색할 수 있습니다. 또한 필터링 조건을 걸어 원하는 파일을 찾을 수 있습니다. 구현한 코드를 간단히 정리하였습니다.

22 May 2018