Kotlin에서는 변수 선언 시 var와 val 키워드를 사용한다.
var: 가변형 변수로, 값을 변경할 수 있다.val: 불변형 변수로, 한 번 값을 할당하면 변경할 수 없다. 이는 Java의 final 키워드와 유사하다.// 불변형 변수는 값 수정이 불가능하다. val name: String = "Kotlin" // 불변형 변수 name = "IT is True" // 수정이 불가능함! // 일반적인 변수 선언 var name: String = "Kotlin" // 변수 선언 후 값 지정 var name: String name = "Kotlin" // String형으로 자동 추론 var name = "Kotlin"
변수는 선언된 위치에 따라 두 가지 이름으로 불린다.
Kotlin은 기본적으로 변수에서 null을 허용하지 않아, 변수에 값을 할당하지 않은 채 사용하면 에러를 표시하고 컴파일을 막아준다. 이를 통해 의도치 않은 동작이나 null pointer exception 등을 방지할 수 있다.
fun main() { var a: Int = 123 // 코틀린은 값 초기화 필수! println(a) } fun main() { var a: Int a = 123 // 이렇게 초기화해도 된다 println(a) }
상황에 따라 변수에 값이 할당되지 않았다는 것을 하나의 정보로 사용할 경우, nullable 변수로 선언할 수 있다. 하지만 null pointer exception이 발생할 수 있으므로 주의해서 사용해야 한다.
fun main() { var a: Int a = 123 //이렇게 초기화해도 된다 println(a) }
그런데 상황에 따라 변수에 값이 할당되지 않았다는 것을 하나의 정보로 사용하는 경우도 있을 수 있다.
fun main() { var a: Int? = null // '?'를 표시하지 않으면 선언 시 null이 될 수 없음 }
Kotlin에서 제공하는 기본 자료형은 Java와 거의 동일하다. 자바와의 호환을 위해 다양한 정수형과 실수형을 제공한다.
| 자료형 | 크기 | 범위 |
|---|---|---|
| Byte | 1Byte | 128 ~ 127 |
| Short | 2Byte | 32768 ~ 32767 |
| Int | 2Byte | -2147483648 ~ 2147483647 |
| Long | 8Byte | -9223372036854775808 ~ 9223372036854775807 |
| UByte | 1Byte | 0 ~ 255 |
| UShort | 2Byte | 0 ~ 4294967295 |
| UInt | 4Byte | 범위 |
| ULong | 8Byte | 0 ~ 18446744073709551615 |
| 자료형 | 크기 | 범위 |
|---|---|---|
| Float | 4Byte | 1.4E-45 ~ 3.4028235E38 |
| Double | 8Byte | 4.9E-324 ~ 1.7976931348623157E308 |
fun main() { var intValue: Int = 1234 var longValue: Long = 1234L // L을 붙여 더 큰 메모리를 사용하는 정수임을 표시 var intValueByHex: Int = 0x1af // 16진수 var intValueByBin: Int = 0b101 // 2진수 (binary 약자) /* 코틀린은 8진수 표기는 지원하지 않는다. */ var doubleValue: Double = 123.5 // 실수는 소수점을 포함해 숫자를 쓰거나 var doubleValueWithExp: Double = 123.5e10 // 필요시 지수 표기법을 추가한다. var floatValue: Float = 123.5f // Float는 f를 붙인다. }
| 자료형 | 설명 |
|---|---|
| Boolean | 논리 자료형으로 true 또는 false를 표현 |
| Char | 문자 자료형으로 작은 따옴표('') 사이에 한 글자를 저장 |
| String | 문자열 자료형으로 큰 따옴표("") 사이에 문자를 저장 |
// 문자, 문자열 fun main() { var charValue: Char = 'a' var koreanCharValue: Char = '가' var stringValue = "one line string test" var multiLineStringValue = """multiline string test""" } // Boolean fun main() { var booleanValue: Boolean = true }
Kotlin은 형 변환 시 발생할 수 있는 오류를 막기 위해 암시적 형변환을 지원하지 않는다. 대신 명시적 형변환을 통해 자료형을 변환한다.
형변환 함수
fun main() { var a: Int = 54321 var b: Long = a.toLong() // int를 long형으로 변환 }
배열은 처음 선언했을 때의 전체 크기를 변경할 수 없지만, 한 번 선언하면 다른 자료구조보다 빠른 입출력이 가능하다.
fun main() { var intArr = arrayOf(1, 2, 3, 4, 5) // int 배열 var nullArr = arrayOfNulls<Int>(5) // 비어있는 5크기의 배열 intArr[2] = 8 // index2에 8값 할당 }
Kotlin은 변수나 함수들을 선언할 때나 연산이 이루어질 때 자료형을 코드에 명시하지 않아도 자동으로 자료형을 추론한다.
fun main() { var a = 1234 // int var b = 1234L // long var c = 12.45 // Double var d = 12.45f // float var e = 0xABCD // 16진수 var f = 0b0101010 // 2진수 var g = true // boolean var h = 'C' // Char }