개인 광고 영역

Google I/O 2017 이후 Kotlin은 안드로이드를 개발할 수 있는 또 하나의 정식 언어가 되었습니다.

기존에 작성하였던(2016. 07. 31) 글을 최신으로 업데이트합니다.

Android Studio 3.0 정식 버전이 나오면 다음 글은 의미가 없어지긴 하지만 플러그인 설치하는 과정을 다시 정리합니다.

Android Studio와 Kotlin

Android Studio는 IntelliJ IDEA 베이스로 개발 배포 중인 IDE이며, Kotlin 역시 2011년 JetBrains에서 첫 배포 이후 1.1.x 버전까지 배포 중인 오픈소스입니다.

Google I/O 2017에서 Android 개발 언어로 정식 채택되었고, Android Studio 3.0부터는 정식 지원하게 되었습니다.

kotlin-android

IntelliJ에서는 오래전부터 Kotlin을 지원하고 있었고, Andorid Studio 3.0부터는 별도의 Plugin 없이도 사용이 가능해졌습니다.

이번 글에서는 Android Studio 2.x 버전까지는 JetBrains에서 제공하는 Kotlin plugin을 설치하는 과정을 거쳐 kotlin을 사용할 수 있습니다.


Android Studio Plugin 설치하기

kotlin 플러그인은 Android Studio 2.x 버전에서는 별도 설치를 해주어야 합니다.

kotlin-plugin-01

설치하는 과정은 Android studio 설정 페이지를 통해 설치할 수 있습니다.
Mac[command + ,]을 통해 설정을 실행하거나, 아래와 같이 Configures > Plugins로 바로 실행이 가능합니다.

kotlin-plugin-02

아래와 같이 Browse Repositories을 실행 상태에서 Kotlin을 검색합니다.

kotlin-plugin-03

설치를 진행합니다.

kotlin-plugin-04


플러그인 직접 받아 설치하기

만약 플러그인을 직접 다운로드하고 싶으시다면 아래 사이트를 통해 받을 수 있습니다.

JetBrains - Plugins : Kotlin

다운로드는 Android Studio 사용하는 버전에 따라서 최신 버전을 다운로드합니다.

이때 zip 파일은 압축을 해제하지 않고, 그대로 사용합니다.

Android Studio 설정 > Plugins에서 Install plugins from disk...을 눌러줍니다.

kotlin-install-01

그리고 다운로드한 폴더에서 plugin을 선택해줍니다.

kotlin-install-02


Kotlin plugin 설치 확인

설치된 Kotlin은 아래와 같이 Tools > Kotlin에서 확인이 가능합니다.

여기의 메뉴를 통해서 이미 지정한 Kotlin Plugin을 업데이트하고 적용, Convert 하는 게 모두 가능합니다.

kotlin-plugin-05


Kotlin 적용하기

Plugin 설치 완료되었기에 Kotlin 개발 환경을 만들 수 있습니다.

Kotlin은 확장자 .kt 사용하게 됩니다.

별도의 Kotlin 폴더를 지정하는 게 가능하며, 기존 java 폴더에서 .java/.kt을 함께 사용이 가능합니다.

Kotlin Convert 사용하여 Java 파일을 Kotlin convert 과정을 다루겠습니다.


Android Studio를 통해서 새로운 프로젝트를 생성합니다.

간단하게 샘플 프로젝트를 생성합니다.

new-project-01

Basic Activity을 새로 생성합니다.

new-project-02


그냥 Convert 해보기

생성된 프로젝트의 MainActivity.java에서 Enter action or option name을 실행합니다. 단축키 Mac [command + shift + a]/Window [ctrl + shift + a]

실행하여 convert java을 입력합니다.

convert-kotlin-01

또는 아래와 같이 Code > Convert Java File to Kotlin File을 눌러줍니다.

여기에 단축키가 노출되고 있는데 Mac [command + shift + option + k]/Window [ctrl + shift + alt + k]을 통해 간단하게 처리 가능합니다.

convert-kotlin-02

Convert 진행 중 별도 팝업으로 최종 확인이 가능합니다. OK를 눌러주면 .kt 파일이 생성됩니다.

convert-kotlin-03


dependencies 추가하기

kotlin dependencies을 추가하지 않은 상태에서 convert을 진행하는 경우에는 아래 그림과 같이 Kotlin not configured 상태를 나타냅니다. 간단하게 configure을 눌러서 실행시켜주면 되겠습니다.

add-dependencies-01

직접 dependencies을 추가하는 방법은 Tools > Kotlin > Configure Kotlin in Project을 눌러서 추가가 가능합니다.

add-dependencies-02

Configure Kotlin은 아래와 같이 기본값으로 설정해주면 됩니다. Kotlin은 최신 버전이 1.1.3_2이 최신입니다.

add-dependencies-03

추가가 완료되면 build.gradle 파일에 각각 필요한 데이터가 추가됩니다.


dependencies 확인

전체 프로젝트의 build.gradle

buildscript {
    ext.kotlin_version = '1.1.3-2'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

실제 app의 build.gradle에는 아래와 같이 dependencies가 추가됩니다.

apply plugin: 'kotlin-android'

dependencies {
    // ...
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}


변환된 Activity 코드 살펴보기

상속 코드

Java에서는 extends/implements를 통해 상속 관계를 나타내고, Java 7에서는 onClickListener을 아래와 같이 구현하게 됩니다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab =
          (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view,
                  "Replace with your own action",
                  Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
            }
        });
    }
}

위의 코드를 Kotlin으로 변환하면 아래와 같은 코드가 나타납니다.

상속 관계는 :을 통해서 나타내며, 추상 클래스 상속시에는 ()가 필수로 들어갑니다.

상속시 java에서와 다르게 class Name : Implements, Abstract()와 같이 순서에 무관하게 상속 관계를 정리할 수 있습니다.

class KotlinActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar =
          findViewById(R.id.toolbar) as Toolbar
        setSupportActionBar(toolbar)

        val fab =
          findViewById(R.id.fab) as FloatingActionButton
        fab.setOnClickListener {
            view -> Snackbar.make(view,
              "Replace with your own action",
              Snackbar.LENGTH_LONG)
              .setAction("Action", null).show() }
    }
}


findViewById

kotlin의 변수 선언 방식이 java와는 다릅니다. 이를 findViewById을 통해서 알아보면 아래와 같습니다.

// java 형식
변수Type 변수명 = (변수 Type  변환) findViewById()
// java 형식 - 최신 AS 3.0에서는 형 변환 불필요
변수Type 변수명 = findViewById()

// Kotlin 형식
val/var 변수명: 변수Type = findViewById() as 변수Type
val/var 변수명 = findViewById() as 변수Type

val은 java final과 동일하고, var은 값이 변경 가능한 일반 변수입니다.


Lambda 식

Kotlin은 Lambda 식을 기본으로 제공합니다. Java에서도 Lambda 식을 사용하기 위해서는 구글에서 제공하는 백포트 또는 레트로 람다를 통해 적용이 가능합니다.

// Java
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view,
          "Replace with your own action",
          Snackbar.LENGTH_LONG)
            .setAction("Action", null).show();
    }
});

// Kotlin
fab.setOnClickListener {
    view -> Snackbar.make(view,
      "Replace with your own action",
      Snackbar.LENGTH_LONG)
      .setAction("Action", null).show() }

람다식에서의 마지막 라인은 return에 해당하며, 메소드로 전달되는 값이 1개인 경우 it 키워드로 대체할 수 있습니다. 1개 이상이면 parameter1, parameter2 ... ->으로 축약해야 합니다.

fab.setOnClickListener {
    Snackbar.make(it,
      "Replace with your own action",
      Snackbar.LENGTH_LONG)
      .setAction("Action", null).show() }

축약한 parameter1, parameter2 ->에서 parameter2를 사용하지 않으면 parameter, _ ->으로 처리해야 합니다. 이 경우 _을 사용해야 합니다.

fab.setOnClickListener {
    _ ->
    Snackbar.make(it, // it 오류 발생
      "Replace with your own action",
      Snackbar.LENGTH_LONG)
      .setAction("Action", null).show() }


마무리

Android Studio 2.x 버전에서 kotlin plugin을 설치하고, 적용하는 과정을 다루었습니다.

간단하게 변환된 코드도 함께 설명하였습니다.

result

java을 이미 잘 알고 있으면 kotlin 문법은 금방 익히는 게 가능합니다.

Convert와 Kotlin 문서를 함께 공부하면서 익히면 빠르게 학습 가능합니다.


kotlin 관련 글 더 보기


개인 광고 영역

Tae-hwan

Android, Kotlin .. Create a content development.