val 변수명:타입 = 값
var 변수명:타입 = 값
var
키워드와 다르게 val
키워드로 선언한 변수는 값을 수정할 수 없습니다.
val data1:Int // Error
val data2 = 10
.
.
fun main() {
...
}
class User {
val data4: Int // Error
val data5: Int = 10
최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초기값을 할당해야 합니다.
초기화를 미룰려면 lateinit
이나 lazy
키워드를 이용해야 합니다.
lateinit var data:String
val data:Int by lazy {
println("in lazy...")
10 // 10으로 값이 초기화 됨
}
Int, Short, Long, Double, Float, Byte, Boolean, Char, String
val a1:Byte = 0b00001011
val a2:Int = 123
val a3:Short = 123
val a4:Long = 10L
val a5:Double = 10.0
val a6:Float = 10.0f
val a7:Boolean = true
val a8:Char = 'a'
val a9:String = "Hello"
print("Hello") // "Hello" 출력
println("Hello") // "Hello\n" 출력
fun main() {
var str = """
Hello
World!
"""
println("$str")
}
Hello
World!
원래 문자열 안에서 줄 바꿈이나 들여쓰기를 하려면 \
를 이용해야 하지만, """
를 사용하면 문자열 안의 들여쓰기나 줄바꿈이 모두 반영됩니다.
fun main() {
var a:Int = 5
var b:Int = 10
fun sum(a:Int, b:Int):Int {
return a + b
}
println("$a + $b = ${sum(a, b)}, plus = ${a + b}")
}
5 + 10 = 15, plus = 15
String
타입의 데이터에 변수값이나 어떤 연산식의 결과값을 포함해야 할때는 $
기호를 이용할 수 있습니다.
Any
는 코틀린에서 최상위 클래스이기 때문에 모든 타입의 데이터를 할당할 수 있습니다.
val data1:Any = 10
val data2:Any = "Hello"
리턴값이 없는 함수를 선언할 경우 타입을 Uint
로 지정하거나 타입을 생략할 수 있습니다.
fun hello:Uint {
println("Hello")
}
fun world {
println("world")
}
val data:Nothing? = null
Nothing
으로 선언한 변수에는 null
만 대입할 수 있습니다. Nothing
으로 선언한 변수는 데이터로서의 의미가 없습니다.
fun some1():Nothing? {
return null
}
fun some2():Nothing {
throw Exception()
}
Nothing
은 주로 함수의 반환 타입에 사용합니다.
항상 null
만 반환하는 함수나 예외를 던지는 함수의 반환 타입에 Nothing
을 사용합니다.
코틀린의 모든 타입은 객체이기 때문에 변수에 null
을 대입할 수 있습니다. 그래서 널 허용인지 불허용인지 명확히 구분 해야합니다.
타입 뒤에 ?
를 붙이면 널 허용으로 선언할 수 있습니다.
var data1:Int = null // Error
var data2:Int? = null // Not Error
fun 함수명(매개 변수명:타입): 반환 타입 {
...
}
fun some(data1:Int): Int {
return data1 * 10
}
반환 타입을 생략하면 Uint
가 됩니다.
fun some(data1:Int = 0, data2:Int = 0): Int {
return data * data2
}
매개변수의 기본값을 설정할 수 있습니다.
some(data2 = 20, data1 = 10)
매개 변수명을 지정하여 호출을 할 수 있습니다.
이것을 명명된 매개변수라고 합니다.
컬렉션이란 여러 개의 데이터를 표현하는 방법으로 Array, List, Set, Map
이 있습니다.
배열 선언
Array<Type> = Array(Size, value)
val data1:Array<Int> = Array(3, {1, 2, 3})
배열 데이터 접근
fun main() {
val data: Array<Int> = Array(3, {0})
data[0] = 10
data[1] = 20
data.set(2, 30)
println(
"""
array size : ${data.size}
array data : ${data[0]}, ${data[1]}, ${data.get(2)}
"""
)
}
array size : 3
array data : 10, 20, 30
배열의 데이터에 접근할 때는 []
를 이용해도 되고 set()
이나 get()
함수를 이용할 수 도 있습니다.
배열을 선언할 때 기초 타입의 배열을 나타내는 클래스를 이용할 수도 있습니다.
BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray
val data1: IntArray = IntArray(3, {0})
val data2: BooleanArray = BooleanArray(3, {false})
val data1 = arrayOf<Int>(10, 20, 30)
arrayOf()
함수를 이용하여 배열을 선언할 때 값을 할당할 수 있습니다.
arrayOf()
함수도 기초 타입을 대상으로 하는 booleanArrayof(), byteArrayOf(), charArrayOf(), doubleArrayOf(), floatArrayOf(), intArrayOf(), longArrayOf(), shortArrayOf()
함수를 제공합니다.
val data1 = intArrayOf(10, 20, 30)
val data2 = booleanArrayOf(true, false, true)