• 특이한 점 : C 계열 언어와 달리 세미콜론을 안찍어도 됨. 자료형을 선언하는 방식이 C 계열 언어들과 많이 다름.

  • 패키지 정의

    • 패키지 정의는 파일 최상단에 위치
    • 디렉터리와 패키지를 일치시키지 않아도 됨.
    package my.demo
    
    import java.util.*
    
    // ... 
    
  • 함수 정의

    • 함수는 fun 키워드로 정의
    • 자바와 달리 리턴타입부터 나오지 않고, fun 키워드로 정의하게 된다. (리턴 타입이 가장 나중에 나옴.)
    fun sum(a: Int, b: Int) : Int{
    	return a + b
    }
    
    • 함수 몸체가 식(Expression)인 경우 return을 생략할 수 있음
    • 이런 경우 return type이 추론됨.
    fun sum(a: Int, b: Int) = a + b
    
    • 리턴 할 값이 없는 경우 Unit(Object)로 리턴함.
    • Unit은 void를 리턴하는 역할.
    fun printKotlin(): Unit{
    	println("Hello Kotlin")
    }
    // Unit은 생략 가능
    fun printKotlin(){
    	println("Hello Kotlin")
    }
    
  • 지역 변수 정의

    • val : 읽기 전용 변수
    • 값의 할당이 1회만 가능. Java의 final과 유사함. (C++에서는 static?)
    val a : Int = 1
    val b = 2
    // 값의 형식을 입력하지 않으면 컴파일러가 자동으로 추론하여 자료형을 초기화함.
    val c : Int // 값이 입력되지 않으면 컴파일 오류
    
    • var : Mutable 변수
    var x = 5
    x += 1
    
  • 주석

    • // 는 한 줄 주석
    • /* */ : 여러줄 주석 (중첩 가능)
  • 문자열 템플릿

    • String Interpolation (문자열 보간법)
    var a = 1;
    var s1 = "a is $a"   // $를 이용하여 변수를 표기함. (PowerShell과 동일한듯)
    
    a = 2;
    val s2 = "${s1.replace("is", "was")}, but now is $a"
    // String 하나 안에서 쉽게 만들어낼 수 있음.
    
  • 조건문

    fun maxOf(a:Int, b:Int): Int{
    	if(a > b)	{
    	return a
    	}
    	else	{
    	return b
    	}
    }
    
    // 조건식으로 사용할 수도 있음.
    fun maxOf(a:Int, b:Int) = if(a > b) a else b;
    
  • nullable

    • 값이 null일 수 있는 경우 타입에 nullable(?) 마크를 명시 해야함 (C#과 같음)
    fun parseInt(str: String): Int?{
    	// 정수가 아닐 경우 null을 리턴
    	// ?를 안쓰고 null을 리턴하면 컴파일 오류.
    }
    
    • nullable 타입의 변수를 접근할 때는 반드시 null 체크를 해야함. (안하면 컴파일 오류)
    fun printProduct(arg1: String, arg2: String){
    val x: Int? = parseInt(arg1)
    val y: Int? = parseInt(arg2)
    
    if(x != null && y != null){
    	println(x*y);
    }
    }
    
  • 자동 타입 변환

    • 타입 체크만 해도 자동으로 타입 변환이 됨.
    fun getStringLength(obj: Any): Int?{
    	if(obj is String){
    		// obj가 자동으로 String 타입으로 변환이 됨.
    		return obj.length
    	}
    	return null
    }
    
  • While loop

    val items = listOf("apple", "banana", "kiwi")
    var index = 0
    while(index < items.size){
    	println("item at $index is ${items[index]}")
    	index++
    }
    // 별거없음.