들어가기 전 

코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다.

 

var, val 이란?

코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 선언을 합니다.

 

var : 가변의 속성을 가진 것에 선언을 합니다.

 

val : 불변의 속성을 가진 것에 선언을 합니다.

 

var num1 = 1 // 가변의 속성을 가졌을 경우

val num2 = 1 // 불변의 속성을 가졌을 경우

 

그럼 자바에서는 어떻게 변수와 상수를 나타내는지에 대해 알아보겠습니다.

 

int num1 = 1 // 가변의 속성을 가졌을 경우

final int num2 = 2 // 불변의 속성을 가졌을 경우

 

속성 Java Kotlin
가변 속성 int num1 = 1 var num1 = 1
불변 속성 final int num2 = 1 val num2 = 1

 

코틀린 타입 명시하는 법

 

Java

 

int numInt;

long numLong;

float numFloat;

double numDouble;

String str;

 

Kotlin

 

var numInt : Int

var numLong : Long

var numFloat : Float

var numDouble : Double

var str : String

 

자바에서는 정수, 실수에 대한 데이터 타입이 primitive type과 reference type으로 타입을 명시해 줍니다. 그러나 코틀린에서는 대문자로 타입을 선언을 했다고 reference type라고 착각할 수 있지만 primitive type만 존재합니다. 

 

그럼 여기서 잠깐!

자바에서는 reference type로 값에 Null이 들어올 수 있었습니다.

그럼 코틀린에서는  reference type가 없으니 값에 Null에 대해 안 다루나?!라고 생각을 하실 수 있습니다.

그거에 대해선 바로 밑에서 설명드리겠습니다.

 

 

코틀린 Safe Call

Safe Call이란 Null이 들어올 수 있는 변수를 안전하게 다루는 기능입니다.

Null을 다루는 방법에 대해 Java와 Kotlin 각각 알아보겠습니다.

 

Java

 

1. 자바 8에서 지원하는 Optional을 이용해서 Null을 안전하게 다룰 수 있습니다.

 

class Person {
    String name;
    int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    
    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}

public static void main(String[] args) {
     Optional<Person> person = Optional.ofNullable(
                                 Optional.of(new Person("정", 25))
                                  .orElseThrow(IllegalStateException::new));
}

 

2. 조건문을 이용하여 값이 null인지를 체크합니다.

 

class Person {
    String name;
    int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    
    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
    
    public boolean nullCheck(String name) {
        if(name == null) {
            return false;
        return true;
}

 

Kotlin

 

fun nullCheck(str : String?) : Boolean {
   return str?.contains("정") ?: false
}
  • 코틀린에서는 Null에 대해 안전하게 다룰 때 위에 코드 String?처럼 null을 안전하게 다룰 수 있습니다.
  • ? <- 이것을 Safe Call이라고 합니다.
  • ?:  <- Elvis Operation이라고 부릅니다.
  • str?.contains("정") ?: false  : 
    • ? : null을 안전하게 다루기 위한 Safe Call
    • ?: 결과값 : 만약 str이 null이 들어오면 ?: 뒤에 정한 결과값을 return 합니다.
    • 만약 null이 안 들어올 경우 제대로 연산된 결과값을 return 합니다.'

 

형 변환

자바에서는 형 변환은 명시적 형변환과 묵시적 형변환이 있습니다.

그러나 코틀린에서는 명시적 형변환만 존재합니다. 

 

Java

 

// 묵시적 형변환
int numInt = 1;
long numLong = numInt;

// 명시적 형변환
double numDouble = 3.5;
numLong= (long) numDouble;

 

Kotlin

 

// 명시적 형변환
// int -> long
val numInt : Int = 5
var numLong : Long = numInt.toLong()

// String -> long

val str : String = "1234"
numLong = str.toLong()

 

 

참고 : 코틀린에서는 자바와 달리 ;(세미콜론)을 생략할 수 있습니다.