ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [kotlin] 코틀린 자료형2
    kotlin/kotlin 공부 2019. 6. 29. 16:08

    코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는 원칙이 있습니다.

    값이 할당되지 않은 변수를 사용하면 오류가 발생합니다.

    값이 없는 상태는 null 이라고 합니다.

    코틀린은 기본적으로 null을 사용하지 않도록 되어 있으나 null 을 허용하려면 자료형 뒤에 ?(물음표) 기호를 붙여서 선언하면 null 을 허용할 수 있습니다.

     

    ex) var str1 : String? = "hello kotlin"

         str1 = null

         println(str1)

     

     

    safe call : null 이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법

     

    표시 방법 : ?.

    사용 방법 : 

    1
    println("str1 : $str1 str1.length: ${str1?.length}")
    cs

     

    non-null 단정 기호 : non-null 단정 기호는 변수에 할당된 값이 null이 아님을 단정하므로 컴파일러가 null 검사 없이 무시합니다. 따라서 변수에 null 이 할당되어 있어도 컴파일은 잘 됩니다. 하지만 NullPointerException이 발생합니다.

     

    표시 표시 : !!.

    사용 방법 : 

    1
    println("str1 : $str1 str1.length: ${str1!!.length}")
    cs

     

    엘비스(Elvis) 연산자

    엘비스 연산자는 변수가 null 인지 아닌지 검사하여 null 이 아니라면 왼쪽 식을 그대롤 실행하고 null 이라면 오른쪽 식을 실행합니다.

    null을 허용한 변수를 조금 더 안전하게 사용하려면 safe call 과 엘비스 연산자를 함께 사용하면 됩니다.

    표시 방법 : ?:

    사용 방법 :

    1
    println("str1 : $str1 str1.length: ${str1?.length ?: -1}")
    cs

     

    ☆ 자료형 변환

    자바는 작은 자료형에서 큰 자료형으로 자동 형변환이 가능하지만 코틀린은 자동 형변환이 가능하지 않습니다.

    ex) 

    자바 : int a = 1;

            double b = a;

    이렇게 해도 에러가 나지 않고 double 자료형으로 잘 변환되어 저장됩니다.

     

    코틀린 : val a: Int = 1

               val b: Double = a

    이렇게 하면 에러가 출력 됩니다. 자동 형 변환이 되지 않기 때문입니다.

     

    이럴 때는 자료형 변환 메서드를 이용해야 합니다.

     

    val b: Double = a.toDouble()

    이렇게 자료형 변환 메서드를 이용하면 에러 없이 자료형을 잘 변환시킬 수 있습니다.

     

    ☆ 자료형 변환 메서드

    toByte : Byte 형으로 변환 toFloat : Float 형으로 변환
    toLong : Long 형으로 변환 toDouble : Double 형으로 변환
    toShort : Short 형으로 변환 toChar : Char 형으로 변환
    toInt : Int 형으로 변환  

     

    ☆ 기본형과 참조형 자료형의 비교

     - 값만 비교할 때는 == 을 사용

     - 참조 주소를 비교하려면 삼중 등호 === 를 사용

     

    이중 등호는 참조에 상관 없이 값이 동일하면 true, 다르면 false

    삼중 등호는 값과 상관 없이 참조가 동일하면 true를 반환. 값이 동일하더라도 참조 주소가 다르면 false를 반환

    ex) val a: Int = 128

         val b: Int? = 128

    println(a == b) // true

    println(a === b) // false

     

    null을 허용한 변수는 값은 값을 저장해도 이중 등호와 삼중 등호를 사용한 결과값이 다릅니다.

     

    <※ 참고> 저장되는 값이 128보다 작으면 그 값은 캐시에 저장되어 참조됩니다. 더 좋은 성능의 프로그램을 만들 수 있기 때문입니다.

     

     

    ☆ 스마트 캐스트

    컴파일러가 자동으로 형 변환을 하는 것을 의미 합니다. 대표적으로 Number 형이 있습니다.

    Number 형으로 정의된 변수에는 저장되는 값에 따라 정수형이나 실수형 등으로 자료형이 변환됩니다.

     

     

    ☆ 자료형 검사

    is 키워드를 이용합니다. is 는 왼쪽 항의 변수가 오른쪽 항의 자료형과 같으면 true, 아니면 false를 반환합니다.

     

     

    ☆ Any형은 자료형이 특별히 정해지지 않은 경우에 사용합니다.

    코틀린의 Any형은 모든 클래스의 부모 클래스입니다. 즉, 모든 클래스의 super class 라는 의미입니다.

    Any형은 무엇이든 될 수 있기 때문에 언제든 필요한 자료형으로 자동 변환할 수 있습니다.

    ex)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    fun main() {
        check("hello")
        check(123)
    }
     
    fun check(x: Any){
        if (x is String) {
            println("x is String: $x")
        }
        if (x is Int) {
            println("x is Int: $x")
        }
    }
    cs

     

     

     

     

    ※ Do it! 코틀린 프로그래밍에서 공부한 내용들 입니다.

    'kotlin > kotlin 공부' 카테고리의 다른 글

    [kotlin] 연산자  (0) 2019.07.01
    [kotlin] 코틀린 자료형  (0) 2019.06.22
    [kotlin] 코틀린 기초, 변수  (0) 2019.06.21

    댓글

Designed by Tistory.