Just a Blog

개인적인 코틀린(Kotlin) 정리 (1) - 구문, var/val, 타입추론 본문

IT, Computer

개인적인 코틀린(Kotlin) 정리 (1) - 구문, var/val, 타입추론

wehong 2021. 4. 20. 12:28

1. 구문

 

(1) expression 가능

값을 평가/계산하는 expression을 구문에 사용할 수 있다. 'a * a'는 순수히 a * a 값을 나타내는 표현(expression)이기 때문에 에러가 나지 않는다(대신 값을 evaluation하는 것 외에 다른 일은 일어나지 않는다).

fun main(args: Array<String>) {

    var a = 1

    a * a

    println(a)

}

이런 특성으로 Kotlin에서는 다음과 같이 함수(function)을 expression으로 선언할 수도 있게 된다.

fun square(s:Int) = s * s

 

(2) 각 구문에 세미콜론(;)은 생략 가능하다 (써도 그만 안써도 그만)

var a = 1

println(a)

 

(3) 구문 블럭

Java와 동일하게 '{', '}'를 양쪽에 사용해서 구문들을 블럭으로 묶을 수 있다.

if (a > 3) {

...

}

이러한 블럭은 변수에 함수를 할당할 때도 사용할 수 있다.

val exp = { println("A"); println("B") }

 

 

2. var/val

 

(1) var

프로그램 내에서 동적으로 값이 변하는(mutable) 지시자(identifier)에는 'var'를 사용하여 선언한다(아마도 'variable'(변수)의 약자일 듯). Java에서 일반적으로 사용하던 변수와 유사하다.

var a = 1

a = a + 11

 

(2) val

프로그램 내에서 한번 할당되고 변하지 않을 대상을 지정하는 지시자에는 'val'을 사용하여 선언한다(아마도 'value'(값)의 약자일 듯).

val a = 23

값이 변하지 않는다고 해서 Java의 상수와 동일하다고 생각하면 안된다. val 지시자로 지정된 변수는 컴파일 타임에 지정되지 않고 프로그램이 실행될 때 지정될 수 있기 때문이다. 예를 들어 다음의 코드에서 val로 지정된 변수 'text'는 프로그램 실행 후 사용자가 어떤 콘솔 입력을 해야 그 값이 정해진다.

fun main(args: Array<String>) {

    print("input:")

    val text = readLine()!!

    println(text)

}

 

 

3. 타입추론(type inference)

 

(1) var 혹은 val로 지시한 변수에 값을 직접 입력하거나 문법적으로 타입을 예상할 수 있는 경우, 타입을 명시할 필요가 없으며 컴파일러가 자동으로 타입을 추론한다.

var a = 1                   (지정된 '1'이라는 값을 보고 변수 a를 Int로 추론)

val num = a * 10      (지정된 a * 10 값의 타입을 보고 변수 num을 Int로 추론)

val t = readLine()!!   (readLine() 함수의 리턴 타입을 보고 변수 t를 String으로 추론)

 

(2) 값을 지정하지 않으면 컴파일러가 타입을 추론할 수 없기 때문에 그 때는 타입을 명시해야 한다.

var x                        (x의 타입을 추론할 수 없다)

var x:Int? = null       (':Int?'를 명시함으로써 x가 Int 타입의 null임을 알 수 있다)

 

<<참고>>
var x = null              ((Kotlin 1.3 기준) x의 구체적 타입을 추론할 수 없을 것 같지만 x를 Nothing 타입으로 추론한다)

 

 

Comments