# 자료형 > 자바와 달리 원시 자료형이 없으면 모든 자료형이 객체입니다. ## 숫자형 ### 정수형 - Byte - Short - Int - Long ### 부동 소수형 - FLoat - Double ### 형 변환 - toByte() - toShort() - toInt() - toLong - toFloat() - toDouble() ### 연산자 #### 산술 연산자 - +, -, *, /, % #### 비트 연산자 - shl - shr - ushr - and - or - xor - inv #### 비교 연산자 - ==, != - <, >, <=, >= ## 부호없는 정수형 - UByte - UShort - UInt - ULong ```kotlin val a: UShort = 1u val b = 1UL ``` ## 부울형 - Boolean #### 연산자 - || - && - ! ## 문자형 - Char ```kotlin val a: Char = '\t' ``` ## 문자열형 - String ```kotlin val s = "abcd" ``` 문자열을 구성하는 각 문자는 배열 형태의 첨자(`str[i]')를 통해서 접근할 수 있으며, `for`를 사용해서 반복할 수도 있습니다. ```kotlin for (ch in str) { println(ch) } ``` ### Raw String ```kotlin val text = """ Hello, "World"! This is a raw string. """ ``` 각 줄 앞의 공백을 제거하려면, `trimMargin()`을 사용합니다. ```kotlin val text = """ |Hello, "World"! |This is a raw string. """.trimMargin() ``` 줄의 시작을 나타내는 기본값인 '|' 대신 다른 문자를 사용하려면, `trimMargin(">")` 같은 형식으로 사용할 수 있습니다. ### 템플릿 문자열 템플릿에 변수를 삽입하려는 경우에는 `$`를 사용합니다. 경우에 따라서 `{}`를 사용해서 표현식을 묶어 줄 수 있습니다. ```kotlin var a = 1 val str1 = "a is $a" a = 2 val str2 = "${str1.replace("is", "was")}, but now is $a"` ``` 문자열 템플릿은 Raw String에도 사용할 수 있습니다. Raw String에서 '$' 문자를 표시하려는 경우에는 다음과 같이 사용합니다. ```kotlin val text = """ The price is ${'$'}9.99 """.trimMargin() ``` ## 배열 > 코틀린에서 배열은 `Array`로 표현합니다. 기본적으로 `get()`, `set()` 함수가 있으며 연산자 오버로딩이 되어 첨자 표현(`[]`)을 사용할 수 있습니다. ### 배열의 생성 ```kotlin val array1 = arrayOf(1, 2, 3, 4) // [1,2,3,4] val array2 = arrayOfNulls(4) // [null,null,null,null] ``` ```kotlin val array = Array(5) {i -> (i*i).toString()} ``` ### 원시타입 배열 - ByteArray - ShortArray - IntArray ```kotlin val array1: IntArray = intArrayOf(1,2,3) val array2 = IntArray(5) // [0,0,0,0,0] val array3 = IntArray(5) {43} // [43,43,43,43,43] ``` ## Any 코틀린에서 모든 클래스의 부모 클래스는 `Any`입니다. 자바에서의 최상위 객체가 `Object`인 것과 마찬가지입니다. `Any`는 다음 메서드를 갖고 있습니다. - equals() - hashCode() - toString() ## 타입 판별 연산자 - `is`, `!is` ```kotlin if (obj is String) {} ``` ### 자동 형변환 자료형이 판별된 이후에는 자동으로 형변환이 이루어집니다. ```kotlin if (x is String && x.length > 0){ print(x.length) } ``` ## 형변환 연산자 - `as` - `as?` ```kotlin val x: Stirng = y as String // x, y 모두 nullable이 나닌 경우 val x: String? = y as String? // x, y 모두 nullable인 경 ``` `as?`를 사용하면 형변환이 실패한 경우에 null을 반환합니다. ```kotlin val x: String? = y as? String ``` ## Type alias 타입 얼라이어스를 사용하면 자료형의 이름을 다른 이름으로 대신 사용할 수 있습니다. ```kotlin typealias NodeSet = Set ``` ```kotlin class A { inner class Inner } typealias AInner = A.Inner ```