코틀린 언어 정리 1-2

기본 - 형 변환, 변수, 상수

형 변환

is, !is

객체의 타입을 확인할 때 사용합니다.


스마트 캐스팅

코틀린에서 객체지향 개념에 의해 프로그래밍을 하는 경우 객체를 Any 등의 상위 타입 변수/매개변수 등으로 전달 받은 후 원래의 하위 타입으로 캐스팅 하여 사용하는 경우가 종종 있습니다. 이 때 상위 타입(Any 타입이라고 가정) 변수로 전달 받은 객체를 is 연산자로 확인 하지 않고 실제 타입의 변수에 대입하면 컴파일 에러가 발생합니다. 그런데 is 연산자로 타입 확인을 한 이 후 라면 상위 타입으로 전달 받은 객체를 하위 타입으로 선언된 객체 변수에 대입할 수 있습니다. 더 나아가 하위 타입의 변수에 직접 대입 하지 않고도 상위 타입 변수를 원래의 하위 타입으로 간주하여 사용할 수도 있습니다.


설명을 개별적으로 나누어 보면 다음과 같습니다.

  • nullable 타입의 변수는 그 값이 null 인지 아닌지를 is/!is 연산자로 확인 후 사용해야 합니다.
    예제

var obj:String? = "aaa"

...

if ( obj !is null ) println ( obj.length )


  • 상위 타입으로 전달 받은 하위 타입의 객체를 실제 타입인 하위 타입으로 사용하려면 is 연산자로 실제 타입인지 확인하고 사용해야 합니다.

  • is 연산자로 실제 타입을 확인한 상위 타입의 변수는 실제 타입으로 선언된 변수로 간주하고 사용해도 됩니다.
    예제

fun demo(x: Any) {

   if (x is String) {

       print(x.length) // x is automatically cast to String

   }

}

as, as?

as "Unsafe"

as는 사용 중 예외가 발생할 수 있어 "Unsafe cast operator"라고 합니다.


예제

var y = 10

val x: String = y as String

위의 예제에서 만약 y가 String Type이 아니라면 예외가 발생합니다.

as? "Safe"

as?는 형 변환 실패 시 예외를 발생시키지 않고 null을 리턴합니다. 이 후 as? 의 결과값을 받은 변수를 null체크 후 사용하면 안전하므로 "Safe cast operaor"라고 합니다.


예제

var y = 10

val x: String? = y as? String?

if ( x == null ) {

   println("x is $x")

}

위의 예제에서 만약 as?를 사용하지 않고 as 를 사용한다면 마찬가지로 y가 String 형이 아닐 때 예외가 발생합니다.


변수

var, val 두가지 속성의 변수를 선언할 수 있습니다.


var

변수(읽기/쓰기 가능) 선언


val

읽기 전용 값 선언


예제

var num = 1

var num1: Int = 1

val num2 = 1

val num3: Int = 1


문법

var, val 사용 방법은 동일합니다. 선언에 사용하는 타입(ex. Int, String 등 )이 달라도 사용 형식은 동일합니다.


var 변수이름:형 = 값


예제

var num = 0

var num1:Int = 0

var num2:Double = 0.0


상수

다른 언어와 다르게 최상위 레벨에서만 선언 가능합니다.


예제

const val CONST_VAL = 10


fun test () {

}


+ Recent posts