Kotlin으로 Android를 개발하면서 느낀점 및 장점 소개

Lazysoul
9 min readJul 8, 2016

Kotlin 1.0이 나오기전 Kotlin에 관심을 갖고 있었습니다. 공부도 할겸 Kotlin으로 Android App을 만들기로 했고, 현재 개발이 거의 완료된 상태 입니다. Kotlin을 사용하면서 느낀점과 잘 모르겠던 부분, 좋다고 느낀 점들을 공유 합니다.

함수형 프로그래밍을 공부하고 있습니다. 관심 있으신분들은 언제나 환영합니다. ^^

Immutable 변수

함수형 프로그래밍을 공부하는 단계이지만, Immutable 이 함수형 프로그래밍의 주요 컨셉이라고 생각합니다. Immutable이 중요한 이유는 Immutable한 값을 사용 함으로써 SideEffect를 줄이고 더불어 동시성 도 보다 안전하게 처리 할 수 있습니다.

상태가 없고 변하지 않는 요소를 사용해 SideEffect를 최소화 하자.

Kotlin 외에 swift, scala등 다른 모던 랭귀지들도 마찬가지라고 생각합니다. Kotlin은 이런 컨셉을 고려해 변경 가능한 변수와, 변경 불가능한 변수를 제공합니다. Java 경험 편의상 변수라고 칭하겠습니다.

val는 Value를 뜻 하고 변경 불가능한 변수를 말하며, Java에서 final과 같다고 생각하면 됩니다. 만약 val로 정의한 변수를 재정의 한다면 컴파일타임에 error발생 시켜 줍니다.

var는 Variable을 뜻 하며 Java에서 일반적으로 사용하고 있는 변수를 생각하면 됩니다. 변경가능한 변수를 말합니다.

상황에 맞게 var과 val를 쓰는것이 좋고, 함수형 패러다임에 적응해 보고 싶다면 되도록 val를 쓰는 연습을 하는 것도 좋을 것 같습니다.

NullCheck

Android에서 Data를 다룰 때 습관적으로 작성하는 보일러 플레이트가 있습니다. Null check… 물론 Null check를 해주는것이 안전한 프로그래밍이고 좋은 습관인 것은 맞지만, 실제로 Data가 Null이 아닌 경우도 있습니다. 이렇게 명확히 null이 아닌 경우에는 Null check를 할 필요가 없습니다. Kotlin은 이를 매우 직관적으로 표현 및 처리 할 수 있습니다.

DataType 뒤에 ?(첫번째 메소드 String?) 가 붙으면 Data는 Null일 수도 있고 Null이 아닐 수도 있다를 의미합니다. ? 가 붙은 Data를 처리하려면 항상 Null check 를 해줘야 합니다.

Data 뒤에 !! 가 오는 경우는 절대 Null이 오지 않는 경우를 말합니다. !!가 붙는 경우에는 별도로 Null check를 해주지 않아도 됩니다.

이 처럼 가독성이 뛰어나 협업을 하는데 있어, 주석이나 비효율적인 Null check를 하지 않아도 되는 장점이 있습니다. 물론 변수를 선언하거나 파라미터로 넘길 때 Null이 될 수 있는지 아닌지 주의해서 사용해야 합니다. 실제로Null이 올 수 있는 경우에는 !! 를 사용해서는 안 됩니다.

또 Null check를 위해 위에 사용한 isNullOrEmpty 메소드를 사용하면 Data == Null || data.isEmtpy() 를 한번에 처리 할 수도 있습니다.

Null이 아닌 경우에만 특별한 처리가 있다면

처럼 let을 사용해 Null Safe 하게 코딩을 할 수 있습니다.

Class 생성(생성자)

Kotlin을 처음 접한 뒤 class를 생성하고 머리가 하얗게 됐습니다… class는 생성했는데... 생성자는 어떻게 만들지?? 다행히 Kotlin 문서에 자세하게 설명 되어 있습니다. 하지만 문서를 자세히 읽지 않으면 조금 헷갈릴 수도 있습니다.

생성자에는 Primary 생성자와 Secondary라는 2가지 생성자가 존재 합니다. 일반적으로 생성자가 하나인 경우에는 Primary 생성자를 사용하고, 오버로딩이 필요한 경우에는 Secondary 생성자를 사용 하면 됩니다.

위 코드는 Primaray 생성자를 사용한 경우이며 class를 선언 할때 파라미터들을 선언해주는 방식입니다. class를 생성하고 무언가 선 처리가 필요하다면 init {} 이라는 블럭을 만들어 처리를 하면 됩니다.

위 코드는 Secondary생성자를 사용 한 경우이며 Kotlin 홈페이지에 예제로 나와있는 코드입니다.

Singleton

Java에서 Singleton을 사용하는 경우, 일반적으로 static 멤버를 만들고 생성자를 private으로 처리하는 등 일반적인 Singleton코드가 있습니다.

하지만 Kotlin에서는 이런 별도의 처리가 필요 없습니다.

object를 생성하기만 하면 됩니다. 위 코드처럼 MemoManager를 object로 만들어 놓으면 우리가 알던 Singleton의 역할을 합니다. Kotlin에서 Singleton 구현은 매우 간단합니다.

static 변수

Java에서 static 변수들을 사용할 경우가 있습니다. Kotlin에는 static이라는 expression이 없습니다. 이 경우에는 companion object를 사용합니다.

위와 같이 처리하면 Java에서 static 변수처럼 외부에서 접근이 가능합니다.

Kotlin Extention For Andorid

View를 자동으로 바인딩 해줍니다. 과거(버전이 몇인지는 잘…)에는 별도의 Plugin 설치가 필요했지만, 현재는 Kotlin 내부에 포함되어 있어 별도의 설치가 필요하지 않습니다.

위 코드를 보면 import를 통해 layout 바인딩을 해줍니다. Android 개발에 있어 가장 대표적인 보일러 플레이트 (findViewById)를 일일히 선언해주지 않아도 됩니다. Java에서는 이게 싫어 Butterknife와 같은 라이브러리를 사용하는데 Kotlin에서는 사용하지 않아도 됩니다.

실제로 바인딩 된 view를 사용할 때는 위 코드처럼 view의 Id만을 가지고 사용할 수 있습니다. 주의할 부분은 view가 layout에 바인딩되는 타이밍을 잘 고려해야 한다는 점입니다. layout이 생성되는 타이밍이 애매한 경우에는 post를 이용해 처리하면 됩니다.

반복문(for loop)

Kotlin은 다른 ModenLanguage들과 유사한 반복문을 제공합니다.

foreach 내에서 자기 자신에 접근할 경우에는 it을 사용합니다.

Collection

map, filter, zip… 등 ModenLanguage들의 collection에서 제공하는 api들을 Kotlin 역시 제공합니다. 이를 통해 Data를 좀더 쉽게 관리할 수 있습니다.

lateinit

멤버 변수를 좋아하지는 않지만, 어쩔수 없이 멤버 변수들을 사용해야 하는 경우가 있습니다.

멤버 변수를 선언할 때 값이 Set 되면 좋지만, 런타임에 값이 Set 되어야 하는 경우가 있습니다. 이 경우 멤버변수를 선언할 당시는 값이 set 되지 않아 null 입니다. 따라서 ?를 사용해 멤버변수를 선언해야 됩니다. 앞서 설명 했듯이 ?는 Nullable 한 변수를 나타내기 때문에 해당 변수에 접근 할 때마다 Null check 를 해줘야 합니다. lateinit이라는 예약어를 사용하면 해당 변수는 ?로 nullable 하다는 표시를 하지 않아도 됩니다.

몇 가지 주의할 점은 무조건 var로 선언해야 한다는 것입니다. 또한 Int, String, Long 등 primitive 타입에는 사용 할 수 없습니다. 비슷한 표현으로 by Delegates.notNull()도 있지만 저는 lateinit을 사용하고 있습니다.

정리

Kotlin은 사용할수록 장점이 많은 Language입니다. 위에 정리한 내용중 보완 및 수정이 필요한 부분이 있다면 코멘트를 남겨주시기 바랍니다. 업데이트를 통해 보완하도록 하겠습니다.

Kotlin은 Android 개발자 입장에서 Lambda, ViewBinding, Collection api, NullCheck, lateint, lazy evaluation, data class 등 다양한 장점을 갖고있다고 생각합니다. 이런 장점들은 보일러플레이트를 작성하고 불필요한 사고를 하는 시간을 단축시켜줍니다. 이를 통해 실제 구현해야하는 로직에 더 집중할 수 있습니다.

Kotlin을 현재 진행중인 대형 프로젝트에 바로 적용하는 것에는 현실적인 어려움이 있을 수 있습니다. 때문에 저처럼 개인프로젝트부터 적용할 것을 추천합니다. 가능하다면 진행중인 프로젝트의 신규코드를 Kotlin으로 작성해보는 것도 좋을 것 같습니다.

개인적으로 공부법은 홈페이지가 가장 좋은 것 같습니다.

나중에 한번 더 정리한 자료입니다. 관심있으시면 한번 보셔도 좋을것 같습니다.

위 페이지를 통해 퀴즈를 풀 수도 있습니다.

Kotlin이 무조건 좋다고 말할 수는 없습니다. 하지만 직접 사용해보고 어떤 점이 좋고 어떤점이 안 좋은지 알 필요는 있다고 생각합니다. 혹시라도 Kotlin에 관심이 있는 개발자라면 일단 한번 사용해 볼것을 추천합니다.

--

--