IDE 설치하기


목표 : IntelliJ IDEA Community Edition 2017.3.1 설치 후 'Hello Kotlin' 출력하기


 저는 지금까지 안드로이드 스튜디오 3.0.1로 업데이트 후 안드로이드 스튜디오에서 코틀린 테스트 코드를 실행했었습니다. 아직 코틀린으로 안드로이드 개발을 시작하기까지 갈 길이 멀기도하고 새로운 IDE를 사용해보고 싶어서 코틀린 학습용 환경을 구축을 이제서야 해봤습니다.


https://try.kotlinlang.org/

간단한 예제는 위 사이트에서도 가능합니다.





안드로이드 스튜디오 3.0.1에서 코틀린 코드 테스트


 그럼 코틀린 학습 환경을 구축해보겠습니다. 먼저 IDE인 IntelliJ IDEA를 설치합니다.

IDE 다운로드 : http://www.jetbrains.com 


Tools > IntelliJ IDEA



상업용과 무료버전이 있습니다. 학습용이니 무료버전인 Community를 다운로드 합니다.



다운로드 후 설치를 진행합니다.

본인 OS에 맞게 32 / 64 bit 중 선택합니다.

Create Associations은 해당 파일을 실행할 때 바로 IntelliJ가 켜지도록 연결할지를 선택합니다.

NotePad를 사용중이라 소스파일을 바로 IDE로 켤 일이 없어서 전 uncheck 하고 넘어갔습니다.




설치중...




설치가 완료되면 바로 실행해봅시다.




기존에 사용하던 설정값을 불러오는 부분입니다. 처음 설치할 때는 아무것도 없겠죠?




테마도 고를 수 있습니다.

저는 안드로이드 스튜디오는 밝은색을 사용하니 IntelliJ는 어두운색으로 선택해봤습니다.




코틀린 학습용이라 그냥 바로 Next 합니다.




여기서도 별다른 설정은 필요없고 Start 합니다.




드디어 시작할 수 있을 것 같습니다.

새 프로젝트를 만들어봅시다!




아직 끝이 아닙니다.

JVM에서 Kotlin 학습을 위한 환경을 세팅해야 합니다.

기존 안드로이드나 자발 개발환경이 있었다면 jdk도 이미 있을겁니다.

보통 다음 경로에 있습니다.

C:\Program Files\Java\jdk버전

jdk버전 폴더를 선택해주시면 됩니다.



안드로이드 스튜디오와 유사하지 않나요?

초기에는 Alt + 1로 새 프로젝트 생성이 됩니다.

혹은 File > New > Project




 이제 다음과 같이 코드를 입력하고 실행을 하면 'Hello Kotlin'이 정상적으로 출력됩니다. 코틀린의 main 함수의 형태도 눈여겨 볼만하네요. (Hello World는 식상하여 Hello Kotlin)


fun main(args: Array<String>) {

    println("Hello Kotlin")

}



함수(function)


기본 형태 (Basic syntax)


 Java 함수의 기본 형태

 void 함수명(변수) {

 }

 or

 리턴타입 함수명(변수) {

  return 값;

 }


 코틀린 함수의 기본 형태

 fun 함수명(변수): Unit {

 }

 or

 fun 함수명(변수): 리턴타입 {

  return 값

 }


 코틀린에서는 return 하지 않는 함수(void 함수)에 선언한 리턴타입 Unit은 생략이 가능합니다.


 리턴타입을 가지는 기본 형태를 그대로 활용하여 두 수의 합을 리턴하는 간단한 예제를 하나 만들 수 있습니다.


 Java

 int sum(int a, int b) {

  return a + b;

 }


 코틀린

fun sum(a: Int, b: Int): Int {

  return a + b

 }


 이때 코틀린의 코드는 좀 더 생략이 가능합니다. 


 먼저 리턴값이 a + b 인데 이때 함수에서 return을 생략하고 다음과 같이 사용할 수 있습니다.


fun sum(a: Int, b: Int): Int = a + b;


 이때 a + b의 타입이 Int인 것을 유추할 수 있기 때문에 리턴타입도 생략이 가능합니다.

fun sum(a: Int, b: Int) = a + b;



멤버 함수 (Member function)


 멤버 함수는 클래스(or object) 내에 정의된 함수입니다.


 class Date() {

   fun getDate() {

    println("2017/12/12")

  }

 }


 getDate()가 Date 클래스 내에 정의된 멤버 함수입니다. 멤버 함수는 다음과 같이 .(dot) 을 이용하여 호출할 수 있습니다.


 Date().getDate()



추상 클래스 (Abstract Class)

 클래스와 일부 멤버가 abstract로 선언되면 추상 클래스입니다. abstract 멤버는 아시다시피 클래스 내에서 아무런 구현이 없습니다.

     abstract class Student {

        abstract fun learnKotlin() // 최소 하나 이상의 멤버가 abstract

        fun learnJava() {}

    }

 

 또한 non-abstract open 멤버를 abstract 멤버로 재정의(override) 할 수 있습니다. 

[Remind] 상속을 하려면 꼭 open을 선언해주어야 합니다. 왜냐하면 아무 선언이 없으면 코틀린 클래스는 기본적으로 Java의 final 클래스와 같기 때문입니다.


     open class Person {

        open fun needToSleep() {}

    }


    abstract class Student : Person() {

        override abstract fun needToSleep()

        abstract fun learnKotlin()

        fun learnJava() {}

    }


인터페이스 (Interface)

 코틀린의 인터페이스는 Java8과 매우 유사합니다. abstract method 뿐 만 아니라 method의 구현도 가능합니다.

 [Tip] 인터페이스라고 하면 모든 method가 abstract method인 것이라고 알고 있을 수도 있는데 Java8에서 default 키워드로 method 구현이 가능해졌습니다.

Java

public interface Person {

 void needToSleep(); // interface 내에서는 abstract로 유추

 default String getName() {

   return "Hong";

  }


코틀린

     interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


 interface에서 구현한 method도 override가 가능합니다.

    interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


    class Student : Person {

        override fun needToSleep() {


        }

        fun learnKotlin() {


        }

        override fun getName(): String {

            return "Tom"

        }

    } 


 또한 다음과 같이 하나 이상의 interface를 구현할 수 있습니다.

     interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


    interface Adult {

        fun needToHoliday()

        fun getName():String = "Choi"

    }


    class Student : Person, Adult {

        override fun needToHoliday() {

            

        }

        override fun needToSleep() {


        }

        fun learnKotlin() {


        }

        override fun getName(): String {

            return "Tom"

        }

    }





+ Recent posts