• 기본 타입

    • 코틀린에서 모든 것은 객체임. (C#이랑 비슷한듯?)
    • 모든 것에 멤버 함수나 프로퍼티를 호출 가능하다는 의미.
  • 숫자

    • Java의 숫자형과 비슷함.
    • Kotlin에서 Number는 클래스임. java의 primitive type에 직접 접근할 수 없음.
    • Java에서 숫자형이던 char이 kotlin에서는 숫자형이 아님. (문자형임.)
    • 자료형의 시작이 다 대문자임.
    Kotlin Numbers Bit width
    Double 64
    Float 32
    Long 64
    Int 32
    Short 16
    Byte 8
  • 리터럴

    • 10진수 : 123 (Int, Short)
    • Long : 123L
    • Double : 123.5, 123.5e10
    • Float : 123.5f
    • 2진수 : 0b00001011
    • 8진수 : 미지원
    • 16진수 : 0X0F
    • Underscores in numeric literials (1.1부터 ) 언더스코어를 사용해서 숫자 표현 숫자를 길게 썼을 때 헷갈리지 않을 수 있다는 장점이 있음. (숫자상으로 다를건 없음)
    val oneMillion = 1_000_000
    val creditCardNumber = 1234_5678_9012_3456L
    val socialsecurityNumber = 999_99_9999L
    val hexBytes = 0xFF_EC_DE_5E
    val bytes = 0b11010010_01101001_10010100_10010010
    
  • Representation

    • Java 플랫폼에서 숫자형은 JVM Primitive Type으로 저장됨.
    • Nullable이나 제네릭의 경우 박싱됨.
    • 박싱된 경우 identity를 유지하지 않음. (이건 지금도 유지되는게 맞는지 모르겠네.. 내 IDE에선 같게 나옴)
    fun main(){
        var a: Int = 10000
        var b: Int? = 10000
    
        println("${a === b}")     // equal 3개쓰면 두 객체의 identity가 같은지 알아냄.
        println("${a == b}")     // equal 2개쓰면 두 객체의 값이 같은지 알아냄.
    }
    
  • Explicit Conversions

    • 작은 타입은 큰 타입의 하위 타입이 아님, 즉 작은 타입에서 큰 타입으로의 대입이 안됨.
    • 명시적인 변환 함수를 사용해주어야 함.
    fun main(){
        val a: Int = 1
        //val b:Long = a // 오류. 대입 불가능.
        val b: Long = a.toLong() // 이런 방식으로 명시적인 변환을 해줘야 함.
    }
    
    // toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble() ...
    
  • 문자 (Characters)

    • Char은 숫자로 취급되지 않음.
    fun check(c: Char)
    {
    	if(c == 1) { /* ... */} // Error
    	if(c == 'A') { /* ... */} // OK
    }
    
  • 배열

    • 배열은 Array 클래스로 표현됨. (Generic을 사용하면 Primitive Type이 아니라 Reference Type으로 사용됨.)
    • get, set ([] 연산자 오버로딩됨)
    • size 등 유용한 멤버 함수 포함
    var array: Array<String> = arrayOf("코틀린","강좌")    // Generic (String)
    println(array.get(0))
    println(array[0])
    println(array.size)
    
  • 배열 생성

    • Array의 팩토리 함수를 이용
    • arrayOf() 등의 라이브러리 함수 이용
    val b = Array(5, {i -> i.toString()})
    val a = arrayOf("0", "1", "2", "3", "4")
    
  • 특별한 Array 클래스

    • Primitive 타입의 박싱 오버헤드를 없애기 위한 배열 (Generic Array가 아님.)
    • IntArray, ShortArray
    • Array를 상속한 클래스들은 아니지만, Array와 같은 메소드와 프로퍼티를 가짐. (즉 사용 방법은 동일함.)
    • size 등 유용한 멤버 함수 포함
    val x: IntArray = intArrayOf(1,2,3)
    x[0] = 7
    println(x.get(0))
    println(x[0])
    println(x.size)
    
  • 문자열

    • 문자열은 String 클래스로 표현
    • String은 Character로 구성됨.
    • s[i] 와 같은 방식으로 접근 가능. (immutable 이므로 변경이 안됨.)
    var x: String = "Kotlin"
    println(x.get(0))
    println(x[0])
    prinln(x.length)
    
    for(c in x)
    {
    	prinln(c)
    }