IT/Kotliin

코틀린(Kotlin)의 함수와 변수!

루카스강 2017. 6. 19. 23:56

함수와 변수

Hello World

언어를 제일 먼저 시작하면 Hello World 부터 찍어야 겠죠!

다음은 코틀린 언어로 작성된 Hello World! 입니다

 

fun main(args: Array<String>){

println("Hello, world!")

}

위 예제 코드로 우리는 다음과 같은 포인트를 체크할 수 있습니다.

  • 코틀린은 함수 키워드로 fun 을 사용합니다.
  • 파라미터 타입이 이름 다음에 옵니다.
  • 자바처럼 함수가 클래스를 꼭 둘러쌀 필요가 없습니다. 함수가 가장 먼저와도 상관 없습니다. (와우! C언어 같다!)
  • Array 는 단지 클래스입니다. 자바와 달리 Array Type을 위한 (ex: ArrayList, LinkedList 등) 별도의 특수구문이 없습니다.
  • System.out.println 대신 println 을 사용해도 됩니다.
  • 세미콜론이 없습니다

함수

함수라면 당연 반환 값이 있어야 합니다. (위 예제인 Hello World 에서는 void 를 반환했기에 생략이 되었지만)

코틀린에서는 다음과 같이 함수의 반환 타입을 명시합니다.

 
fun sum(a: Int, b: Int): Int {
  return a+b;
}
>>> println(sum(1,2))
3

함수 선언부도 함수의 파라미터를 써줄 때 처럼, 함수의 이름 그리고 리턴 타입을 마지막에 적어줍니다.

그리고 위 함수와 같이 단순한 함수는 다음과 같이 짧게 표현할 수도 있습니다.

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

이러한 구조를 expression body 라고 부릅니다. (한줄 함수라고 해도 될 것 같은데..)

코틀린에서는 위와 같은 표현식 처럼 식 형태로 함수를 작성할 수 있습니다.

표현식에서는 위와 같이 return type이 생략되는 경우도 볼 수 있는데, return type을 추론해서 컴파일러가 알아서 지정하기 때문입니다. 실제로 다음과 같은 코드는 이렇게 동작합니다.

 
fun typeCheck(type: String) = when(type){
    "string"-> "ABCD"
    "int" -> 10
    "float" -> 10f
    else -> {
        "Error"
    }
}
>>> println(typeCheck("string"))
ABCD
>>> println(typeCheck("int"))
10
>>> println(typeCheck("float"))
10.0
>>> println(typeCheck("???"))
Error

when 함수는 뭐랄까.. if else 문 같은 함수입니다. 자세히는 다음에 다루고, typeCheck 라는 함수의 return type 이 입력 값에 따라 달리지는 것을 볼 수 있습니다.

단 표현식이 아니라 블록 형태의 함수면 반드시 return type을 명시적으로 표시해야합니다.

변수

코틀린에서는 자바와 달리 변수의 형이 두가지 밖에 없습니다.

valvar 입니다.

코틀린은 변수도 추론 형을 사용합니다.

 
val number = 10
val s = "Hello World"

하지만 다음과 같이 명시적으로 변수의 형을 지정해 줄 수도 있습니다.

 
val number : Int = 10

위와 같이 컴파일러가 변수의 타입을 추론해서 지정해줍니다!

다만 변수를 선언과 동시에 초기화를 하지 않는다면 반드시 변수의 형을 지정해주어야 합니다.

변수의 선언이 이루어지지 않았으므로 타입을 추론할 수 없기 때문입니다.

 
val number : Int
number = 10

val 과 var의 차이에 대해 알아봅시다.

  • val (value) : Java의 final과 비슷합니다. 불변 상수로 한번 초기화된 이후에는 수정할 수 없습니다.
  • var(variable) : 수정가능한 변수입니다.

var로 선언을 한 이후 처음 초기화 된 순간 이후는 변수의 형을 변경할 수 없습니다. 예를 들면 다음과 같은 코드는 오류가 발생합니다.

 
var number = 10
number = "10"

두가지 밖에 없으므로 코드의 부작용을 막기 위해서는 초기에는 모두 val 로 선언했다가, 수정이 필요할 경우 var로 바꾸는 것을 추천드립니다.

다음 장에서는 Class 와 Propertie 에 대해 알아봅시다!