기본 타입

Kotlin에서는 모든 것이 멤버 함수와 프로퍼티를 호출가능 한 객체이다.

숫자

Java와 비슷한 타입으로 숫자를 다루지만 완전히 같지는 않다

타입 비트 수
Double 64
Float 32
Lon 64
Int 32
Short 16
Byte 8

리터럴 상수

  • 10 진수 : 123, 123L
  • 16 진수 : 0x0F
  • 이진수 : 0b00001011

8 진수는 미지원

실수 표기

  • 기본은 Double : 123.5, 123.5e10
  • Float : 123.5f

숫자 리터럴의 밑줄 (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

표현

Java 플랫폼에서 숫자는 null 혹은 제네릭이 필요하지 않으면 primitive 타입으로 저장

숫자가 Boxing 되면 identity 는 유지되지 않는다

val a: Int = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!

equality 는 유지된다

val a: Int = 10000
print(a == a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA == anotherBoxedA) // Prints 'true'

명시적 변환

표현이 다르므로 보다 작은 타입은 보다 큰 타입의 서브 타입이 아니다.

// 실제로 컴파일 되지 않음
val a: Int? = 1 // java.lang.Integer
val b: Long? = a // java.lang.Long 으로 자동 타입 변
print(a == b) // Long의 equals는 Long을 체크하므로 false

모든 숫자 타입은 다음의 변환을 지원

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

연산자

연산자 오버로딩 참조

문자

Char 타입으로 문자를 표현. 숫자로 직접 다루는 것은 불가능

fun check(c: Char) {
    if (c == 1) { // ERROR: 호환되지 않는 타입
        // ...
    }
}
  • 문자 리터럴은 단일 따옴표로 표시 '1'
  • 특수 문자는 역슬래쉬를 이용
    • 지원 이스케이프 : \t , \b , \n , \r , \' , \" , \ , $
    • 다른 문자를 인코딩 하려면 유니코드 이스케이프 구문을 사용 '\uFF00'

명시적으로 문자를 숫자로 변환

fun decimalDigitValue(c: Char): Int {
    if (c !in '0'..'9')
        throw IllegalArgumentException("Out of range")
    return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}

Boolean

빌트인 연산자

  • ||
  • &&
  • !

배열

Kotlin의 배열은 Array 클래스, get/set 함수 및 size 프로퍼티 및 다른 유용한 멤버 함수를 가짐 (get/set 함수는 연산자 오버로딩 규칙에 따라 [] 로 변경)

class Array<T> private constructor() {
    val size: Int
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Unit

    operator fun iterator(): Iterator<T>
    // ...
}
  • arrayOf() 를 이용하여 배열을 작성
    • arrayOf(1, 2, 3) => 배열 [1, 2, 3]
  • arrayOfNulls() 리터럴 함수는 지정한 크기를 null 값으로 채워진 배열을 작성

배열 사이즈와 각 인덱스에 대해 초기값을 반환하는 팩토리 함수를 사용

// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })

주의 : Java와 다르게 Kotlin의 배열은 불변이다.

Boxing 오버헤드 없이 primitive 타입의 배열을 나타ㅐ는 특수 클래스도 존재

  • ByteArray, ShortArray, IntArray 등

  • Array 클래스와 상속관계를 가지지않지만 메소드와 프로퍼티는 동일

  • 각 클래스를 위한 팩토리 함수 존재

문자열

문자열 타입은 String이며 불변이다. 문자열 요소는 문자이며 인덱스 연산을 이용해서 접근 가능하다.

문자열 리터럴

2 종류의 문자열 리터럴이 존재

  • 이스케이프 문자열 : 이스케이프 문자를 포함 가능
    • 기존 방법처럼 백슬래시를 이용.
  • raw 문자열 : 개행과 임의 문자를 포함 가능
    • 3개 따옴표로 구분 ("""). 이스케이프외 문자를 포함 가능
val text = """
    for (c in "foo")
        print(c)
"""

trimMargin() 함수로 선두의 공백을 제거도 가능

val text = """
    |Tell me and I forget.
    |Teach me and I remember.
    |Involve me and I learn.
    |(Benjamin Franklin)
    """.trimMargin()

디폴트는 | 문자를 사용하며, 다른 문자를 선택하는 것도 가능 trimMargin(">")

문자열 템플릿

문자열은 템플릿 표현식을 포함 가능. 평가된 결과가 문자열로 결합되어 코드를 포함할 수 있다. 템플릿식은 달러 기호($)로 시작하고 단순한 이름으로 구성된다.

val i = 10
val s = "i = $i" // 결과는 "i = 10"

val s = "abc"
val str = "$s.length is ${s.length}" // 결과는 "abc.length is 3"

raw 문자열에 $ 문자를 표시할 경우 다음 구문을 사용

val price = """
${'$'}9.99
"""

results matching ""

    No results matching ""