출처 : 깡샘의코틀린프로그래밍
기초 데이터 타입
숫자 타입
- Int, Double 등은 클래스이며 이 클래스로 타입을 명시하여 선언한 변수는 그 자체로 객체가 된다.
val intData : Int = 10
val result=intData.minus(5)
- Int, Double, Float, Long, Short, Byte, Char, Booleans, String, Any, Unit, Nothing 타입을 제공한다.
- 코틀린의 숫자 타입의 클래스들은 모두 Number 타입의 서브클래스이다.
- 문자(Character)는 Number Type이 아니다.
- Number Type에 대한 자동 형 변형((implicit conversions for number)을 제공하지 않는다.
val a3: Byte=0b00001011
val a4: Int=123
val a5: Int=0x0F
val a6: Long = 10L
val a7: Double=10.0
val a8: Double=123.5e10
val a9: Float=10.0f
- 숫자 타입에 대입되는 데이터에 언더바를 추가할 수 있다.
val oneMillion: Int = 1_000_000
논리, 문자와 문자열 타입
val isTrue1: Boolean = true && false
val isTrue2: Boolean = true || false
val isTrue3: Boolean = !true
val charData='C'
fun check(c: Char) {
if (c == 1) {//error
}
}
var str:String = "Hello"
println("str[1] : ${str[1]}")
- 문자열은 escaped string과 raw string 으로 구분된다.
val str2="Hello \n World"
val str3="""Hello // 줄바꿈
World"""
//String template
println("result : $name .. ${sum(10)}")
Any 타입
- 코틀린 클래스의 최상위 클래스가 Any이다.
fun getLength(obj : Any) : Int {
if(obj is String) {
return obj.length
}
return 0
}
fun main(args: Array<String>) {
println(getLength("Hello"))
println(getLength(10))
}
fun cases(obj : Any): String{
when(obj) {
1 -> return "One"
"Hello" -> return "Greeting"
is Long -> return "Long"
!is String -> return "Not a string"
else -> return "unknown"
}
}
null 허용 타입
val a: Int =null//error
val b: Int? = null//ok~
fun parseInt(str: String): Int? {
return str.toIntOrNull()
}
Any, Any? 타입
val myVal1: Any = 10
val myVal2: Any?= myVal1
val myVal3: Any? = 10
val myVal4: Any = myVal3//error
val myVal5: Any = myVal3 as Any
val myInt1: Int = 10
val myInt2: Int? = myInt1
val myInt3: Int? = 10
val myInt4: Int = myInt3//error
val myInt5: Int = myInt3 as Int
Unit과 Nothing
fun myFun1(){ }
fun myFun2(): Unit { }
fun myFun(arg: Nothing?): Nothing {
throw Exception()
}
타입확인과 캐스팅
- 타입 체크를 위해 is연산자를 이용한다.
- is연산자를 이용해 타입으로 체크되면 smart cast된다.
fun getStringLength(obj: Any): Int? {
val strData: String = obj//error
if (obj is String) {
return obj.length
}
return null
}
fun getStringLength2(obj: Any): Int? {
if (obj !is String) return null
return obj.length
}
- 기초 데이터 타입에 대한 자동 형변형을 제공하지 않는다.
- 기초 타입의 캐스팅은 toXXX() 함수를 이용해 명시적으로 진행한다.
var a1: Int =10
var a2 : Double = a1//error
var a1: Int =10
var a2 : Double = a1.toDouble()//ok~
캐스팅 | 타입 |
toByte() | Byte |
toShort() | Short |
toInt() | Int |
toLong() | Long |
toFloat() | Float |
toDouble() | Double |
toChar() | Char |
컬렉션 타입
배열
- Array로 표현되며 Array는 get, set, size등의 함수를 포함하고 있는 클래스이다.
fun main(args: Array<String>) {
//arrayOf 함수 이용
var array = arrayOf(1, "kkang", true)
array[0]=10
array[2]="world"
println("${array[0]} .. ${array[1]} .. ${array[2]}")
println("size : ${array.size} .. ${array.get(0)} .. ${array.get(1)} .. ${array.get(2)}")
}
var arrayInt = arrayOf<Int>(10, 20, 30)
var arrayInt2= intArrayOf(10, 20, 30)
var arrayDouble= doubleArrayOf(10.0, 20.0, 30.0)
var array3=Array(3, { i -> i*10})
var array4=Array<Int>(3, {i -> i * 10})
var array5=IntArray(3, { i -> i *10})
var array2= arrayOfNulls<Any>(3)
array2[0]=10
array2[1]="hello"
array2[2]=true
println("${array2[0]} .. ${array2[1]} .. ${array2[2]}")
var emptyArray=Array<String>(3,{""})
emptyArray[0]="hello"
emptyArray[1]="world"
emptyArray[2]="kkang"
println("${emptyArray[0]} .. ${emptyArray[1]} .. ${emptyArray[2]}")
List, Set, Map
- Collection 타입의 클래스들은 mutable 클래스와 immutable 클래스로 구분
- kotlin.collection.List 인터페이스로 표현되며 객체는 immutable이며 size(), get() 함수만 제공된다.
- kotlin.collection.MutableList 인터페이스로 표현되는 객체는 mutable 이며 size(), get() 함수 이외에 add(), set() 함수 제공된다.
타입 | 함수 | 특징 | |
List | List | listOf() | Immutable |
MutableList | mutableListOf() | mutable | |
Map | Map | mapOf() | Immutable |
MutableMap | mutableMapOf() | mutable | |
Set | Set | setOf() | Immutable |
MutableSet | mutableSetOf() | mutable |
fun main(args: Array<String>) {
val immutableList: List<String> = listOf("hello", "world")
println("${immutableList.get(0)} .. ${immutableList.get(1)}")
}
val mutableList: MutableList<String> = mutableListOf("hello", "world")
mutableList.add("kkang")
mutableList.set(1, "korea")
println("${mutableList.get(0)} .. ${mutableList.get(1)} .. ${mutableList.get(2)}")
val arrayList: ArrayList<String> = ArrayList()
arrayList.add("hello")
arrayList.add("kkang")
arrayList.set(1, "world")
println("${arrayList.get(0)} .. ${arrayList.get(1)}")
Iterator
- hasNext() 함수와 next() 함수를 이용해 순차적 이용
val list1= listOf<String>("hello","list")
val iterator1=list1.iterator()
while (iterator1.hasNext()){
println(iterator1.next())
}
'Backend > Kotlin' 카테고리의 다른 글
[Kotlin] 흐름 제어 구문과 연산자(2/2) - 코틀린 잠시 중단 (0) | 2022.09.13 |
---|---|
[Kotlin] 흐름 제어 구문과 연산자(1/2) (0) | 2022.09.05 |
[Kotlin] 변수와 함수 (0) | 2022.09.01 |
[Kotlin] 코틀린 이해 (0) | 2022.08.31 |