함수 선언하기
fun 함수명(매개변수명: 타입): 반환타입{
코드
}
함수의 매개변수(parameter)는 val이 자동으로 적용되며 매개 변숫값을 변경할 수 없음
매개변수에는 기본값을 선언할 수 있습니다. 기본값으로 정해진 값들은 호출시 인자를 전달하지 않아도 되며 인자 전달 방식은 매개변수를 순서대로 할당하는 방법과 매개변수명을 지정하여 호출하는 방법이 있습니다.
fun main(){
fun add(data1 : Int, data2 : Int = 10) : Int {
//오류 -> data1 = 20
return data1 + data2
}
println(add(10))//20
println(add(10,20))//30
println(add(data1=10))//20
println(add(data2=20,data1=10))//30
}
컬렉션 타입 - 여러개의 데이터를 표현하는 방법
Array - 배열 표현
코틀린 배열은 Array 클래스로 표현 합니다.
//생성자
<init>(size:Int,init:(Int)->T)
//생성 예
val data1 : Array<Int> = Array(3,{0}) // 0,0,0
생성자의 첫 번째 매개변수는 배열의 크기이며 두 번째 매개변수는 초기값을 지정하는 함수입니다. 두 번째 매개변수에 있는 {}는 람다 함수(익명 함수)입니다. 배열의 타입은 제네릭으로 표현합니다. 여기서 제네릭은 선언하는 곳이 아니라 이용하는 곳에서 타입을 정하는 기법입니다. 정수 배열이면 Array <Int>로 문자열 배열일 경우 Array <String>으로 표현합니다.
fun main(){
val data1 : Array<Int> = Array(3,{0})
data1[0]=10
data1[1]=20
data1.set(2,30)
println("""
array size : ${data1.size}
array data : ${data1[0]},${data1[1]},${data1.get(2)}// 10 20 30
""")
}
여기서 val을 쓰고서 배열의 데이터를 바꿀 수 있는 것은 포인터 자체만 불변이기 때문에 데이터를 바꾸는 것은 상관없습니다. 배열의 값은 대괄호([])를 이용해도 되고 set()이나 get()함수를 이용할 수도 있습니다.
Array클래스 말고도 arrayOf() 함수로도 제네릭으로 배열을 만들 수 있습니다.
fun main(){
val data1 = arrayOf<Int>(10,20,30)
println("""
array size : ${data1.size}
array data : ${data1[0]},${data1[1]},${data1.get(2)}// 10 20 30
""")
}
기초 타입의 배열
배열의 데이터의 타입이 기초 타입이라면 제네릭으로 명시를 하는 것이 아니라 기초 타입의 배열을 나타내는 클래스를 이용할 수도 있습니다.
ex) BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray
val data1: IntArray = IntArray(3,{0})
val data2: BooleanArray = BooleanArray(3,{false})
물론 arrayOf() 함수도 기초 타입을 대상으로 하는 함수들을 제공합니다.
ex) booleanArrayOf() , byteArrayOf() , charArrayOf() , doubleArrayOf() , floatArrayOf() , intArrayOf() , longArrayOf() , shortArrayOf()
val data1 = intArrayOf(3,2,6)
val data2 = booleanArrayOf(false,true,false)
List, Set, Map
List, Set, Map 은 Collection 인터페이스를 타입으로 표현한 클래스이며 컬렉션 타입 클래스라고도 말합니다.
- List : 순서가 있는 데이터 집합으로 데이터의 중복을 허용합니다.
- Set : 순서가 없으며 데이터의 중복을 허용하지 않습니다.
- Map : 키와 값으로 이루어진 데이터 집합으로 순서가 없으며 키의 중복은 허용하지 않습니다.
Collection타입은 가변(mutable)과 불변(immutable) 클래스로 나뉩니다. 가변은 말 그대로 데이터를 바꿀 수는 클래스를 말하며 불변은 데이터를 바꿀수 없는 클래스를 말합니다. List, Set, Map 은 불변 타입이라 size(), get()( Set 클래스는 데이터를 식별해줄 수 있는 것이 없기 때문에 get()은 사용할 수 없음 ) 함수만 제공하고 변경하는 함수는 주어지지 않습니다 그런지만 List, Set, Map의 가변 버전인 MutableList, MutableSet, MutableMap 은 변경할 수 있는 set() 함수가 주어집니다.
구분 | 타입 | 함수 | 특징 |
List | List | listOf() | 불변 |
MutableList | mutableListOf() | 가변 | |
Set | Set | setOf() | 불변 |
MutableSet | mutableSetOf() | 가변 | |
Map | Map | mapOf() | 불변 |
MutableMap | mutableMapOf() | 가변 |
List
fun main(){
val data1 = listOf<Int>(10,20,30)
//오류 data1[0]=20
//오류 data1[1]=20
//오류 data1.set(2,30)
println("""
list size : ${data1.size}
list data : ${data1[0]},${data1[1]},${data1.get(2)}
""")
}
fun main(){
val data1 = mutableListOf<Int>(10,20,30)
data1[0]=20
data1[1]=20
data1.set(2,30)
println("""
list size : ${data1.size}
list data : ${data1[0]},${data1[1]},${data1.get(2)}
""")
}
- List : 순서가 있는 데이터 집합으로 데이터의 중복을 허용합니다.
Set
fun main(){
val data1 = setOf<Int>(20,20,30)
//오류 data1[0]=20
//오류 data1[1]=20
//오류 data1.set(2,30)
println("""
set size : ${data1.size} // 2
set data : ${data1} //20 30
""")
}
fun main(){
val data1 = mutableListOf<Int>(20,20,30)
data1.add(10)
println(data1.contains(10)) // true
data1.remove(20)
println(data1.contains(20)) // false
println("""
set size : ${data1.size} //2
set data : ${data1} //30 10
""")
}
- Set : 순서가 없으며 데이터의 중복을 허용하지 않습니다.
Map
fun main(){
val data1 = mapOf<String,Int>(Pair("One",1),"Two" to 2)
println("""
map size : ${data1.size} //2
map datas : ${data1} // {One=1, Two=2}
map data : ${data1.get("One")} ${data1.get("Two")} // 1 2
""")
}
fun main(){
val data1 = mutableMapOf<String,Int>(Pair("One",1),"Two" to 2)
data1["Two"] = 1
data1["Three"] =3
data1.set("One",2)
println("""
map size : ${data1.size}
map datas : ${data1}
map data : ${data1.get("One")} ${data1.get("Two")} ${data1.get("Three")} ${data1.get("Test")}
""")
}
- Map : 키와 값으로 이루어진 데이터 집합으로 순서가 없으며 키의 중복은 허용하지 않습니다.
'안드로이드 > 깡샘의 안드로이드 앱 프로그래밍' 카테고리의 다른 글
코틀린 공부05 (0) | 2022.01.20 |
---|---|
코틀린 공부04 (0) | 2022.01.16 |
코틀린 공부03 (0) | 2022.01.15 |
코틀린 공부01 (0) | 2022.01.13 |
Kotlin책 - Doit 깡샘의 안드로이드 앱 프로그래밍 with Kotlin (0) | 2022.01.13 |