반응형

기본적인 차이들을 먼저 짚고 예제들을 살펴보자면, Java와 달리 Kotlin에서는

  1. 세미콜론(;)이 없다.
  2. primitive type이 없다.(char, int, double 등) -> 객체로 제공(Int, Double 등)
  3. 변수의 타입이나 메소드의 리턴 타입이 이름 뒤에 따라오는 콜론(:) 뒤에 나온다.
  4. 함수를 변수처럼 사용하는 것이 가능하다.
  5. Destructuring을 지원한다.

 

이외에도 무수히 많은 차이점이 있지만, 개인적인 생각으론 코틀린도 결국 JVM에서 동작하는 OOP 언어이기 때문에 Java를 잘 알고 Java 8 버전부터 등장한 람다식, stream 등에 대해 익숙하신 분들이라면 금방 적응할 수 있다고 본다.

 

Hello, World!

Java

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Kotlin

fun main(args: Array<String>) {
    println("Hello, World!")
}

Kotlin에서는 클래스 선언 없이 main 함수를 바로 정의해도 된다.

 

Arguments

Java

public void hello(String name){
  System.out.print("Hello, " + name + "!");
}

Kotlin

fun hello(name: String) {
    println("Hello, $name!")
}

Kotlin에서는 변수이름: 타입 형태로 선언하고, 문자열 내에서 $를 통해 변수 참조가 가능하다.

만약, 문자열에서 참조할 변수에 일련의 연산을 행하고 싶다면 ${변수+연산} 이런 식으로 중괄호를 사용하면 된다.

 

 

Default Values

Java

public void hello(String name) {
    if (name == null) {
        name = "World";
    }

    System.out.print("Hello, " + name + "!");
}

Kotlin

fun hello(name: String = "World") {
    println("Hello, $name!")
}

Kotlin에는 python과 같이 default value를 파라미터 수준에서 정의할 수 있다. 이는 Java에서 Optional한 값들에 대해 일일이 Overloading 메소드를 만들어야했던 번거로움을 해소해준다.

이를테면 아래와 같은 경우가 그 예다.

Java

public static void main(String[]args){
  createFile("file.txt");

  createFile("file.txt", true);

  createFile("file.txt", true, false);
}

public static File createFile(String filename) { }

public static File createFile(String filename, boolean appendDate) { }

public static File createFile(String filename, boolean appendDate,
                              boolean executable) { }

Kotlin

fun main(args: Array<String>) {
  createFile("file.txt")

  createFile("file.txt", true)
  createFile("file.txt", appendDate = true)

  createFile("file.txt", true, false)
  createFile("file.txt", appendDate = true, executable = true)

  createFile("file.txt", executable = true)
}

fun createFile(filename: String, appendDate: Boolean = false,
               executable: Boolean = false): File { }

Java의 경우 createFile() 이란 메소드를 필요에 따라 다량의 Overloading을 해야하지만, 코틀린은 default value와 named argument라는 특징을 이용해 단 하나의 메소드만 정의하면 된다.

 

Return

Java

public double cube(double x) {
    return x * x * x;
}

Kotlin

fun cube(x: Double) : Double = x * x * x

Single-Expression 리턴을 행하는 함수의 경우 = 키워드를 통해 중괄호{} 없이 함수를 정의할 수 있다.

 

 

반응형
반응형