Lewis's Tech Keep
[kotlin] 코틀린 적응기 - 배열 & 컬렉션, 함수 본문
시작
컬렉션은 데이터 저장 구조나 변경 구조에서 자주 쓸 테니 잘 정리해두자.
배우고 있는 것
https://www.inflearn.com/course/java-to-kotlin
1. 배열 & 컬렉션
배열
배열은 arrayOf로 생성 가능하다.
fun main() {
/**
* array
* */
val array = arrayOf(100, 200)
}
index loop 구문
with index로 사용한다면 idx와 value를 한 번에 부르는 것도 가능하다.
element add는 plus로 추가해줄 수 있다.
fun main() {
/**
* array
* */
val array = arrayOf(100, 200)
// index
for (i in array.indices) {
println("${i}, ${array[i]}")
}
// with index
for ((idx, value) in array.withIndex()) {
println("${idx}, ${value}")
}
// array add
array.plus(300)
}
컬렉션
list
코틀린에서 collection은 가변 컬렉션, 불변 컬렉션을 초기에 명시적으로 설정해준다.
listOf, mutableListOf와 같이 설정해주는 것이다.
이 둘의 차이는
가변 컬렉션 : element 추가, 삭제 가능
불변 컬렉션 : element 추가, 삭제 불가
불변 컬렉션은 추가, 삭제만 안될 뿐이지 기존 element 변경은 가능하다.
fun main() {
/**
* collection
*/
// kotlin 은 불변/ 가변을 초기에 설정해줘야함
val numbers = listOf(100, 200)
// empty collection
val emptyList = emptyList<Int>()
// 타입 추론이 가능하면 생략도 가능
printNumbers(emptyList())
// index 로 가져오는 것처럼 collection에서도 가능
println(numbers[0])
// mutable list
val mutableNumbers = mutableListOf(100, 200)
mutableNumbers.add(300)
}
fun printNumbers(emptyList: List<Int>) {
}
set & map
set은 많이 다르거하 하지는 않다.
map은 to 키워드를 이용하여 Pair 처럼 설정이 가능하다.
fun main() {
/**
* collection
*/
// set
val setNumbers = setOf(100, 200)
setNumbers.plus(300)
// mutable set
val mutableSet = mutableSetOf(100, 200)
mutableSet.add(300)
// mutable map
val map = mutableMapOf<Int, String>()
map[1] = "1"
map[2] = "2"
// immutable map
// map key to value
mapOf(1 to "1", 2 to "2")
// map get
for (key in map.keys) {
println(key)
println(map[key])
}
// map get as entry
for ((key, value) in map.entries) {
println(key)
println(value)
}
}
nullable
nullable 할 수 있는 타입들을 설정하는 방법들이다.
fun main() {
// list element can be null, list not null
val list0 = arrayOf<Int?>(null)
// list element can't be null, list can be null
val list1 : Array<Int>? = null
// list element can be null, list can be null
val list2 : Array<Int?>? = null
val list3 : Array<Int?>? = arrayOf(null)
}
2. 함수
확장 함수
기존 클래스에 추가로 기능을 붙이려는 경우 유용한 함수다.
주의사항
확장 함수와 멤버 함수의 시그니처가 겹치면 멤버 함수만 호출된다.
fun main() {
val str = "ABC"
println(str.lastChar())
}
// 바깥 쪽에서 함수를 부르게 해보자.
// fun 확장하려는클래스.함수이름(파라미터): 리턴타입
// this 를 이용해 실제 클래스 안의 값에 접근
// 확장하려는클래스==수신객체타입
fun String.lastChar(): Char {
return this[this.length - 1]
}
상속 관계의 확장 함수 사용 시
자식 클래스로 생성하고 타입을 부모 클래스로 설정하고 겹치는 확장함수를 부르면 타입의 확장 함수가 호출된다.
fun main() {
val train: Train = Train()
train.isExpensive() // Train extended
val srt1: Train = SRT()
srt1.isExpensive() // Train extended
val srt2: SRT = SRT()
srt2.isExpensive() // SRT extended
}
open class Train (
val name: String = "old Train",
val price: Int = 5_000,
)
fun Train.isExpensive(): Boolean {
println("train extended function")
return this.price >= 10_000
}
class SRT : Train("SRT", 40_000)
fun SRT.isExpensive(): Boolean {
println("srt extended function")
return this.price >= 10_000
}
중위 함수
infix 키워드를 통해 설정이 가능하다.
설정하면 함수 호출 형태가 아닌 생략하고 부르는 형태로 가능하다.
fun main() {
3.add(4)
3.add2(4)
3 add2 4
}
fun Int.add(other: Int): Int {
return this + other
}
infix fun Int.add2(other: Int): Int {
return this + other
}
'Kotlin > Kotlin 적응기' 카테고리의 다른 글
[Kotlin] 코틀린 적응기 - typealias, as import, 람다 break & continue, label, takeif (0) | 2024.10.01 |
---|---|
[Kotlin] 코틀린 적응기 - 람다, 컬렉션 함수형 (0) | 2024.10.01 |
[Kotlin] 코틀린 적응기 - 중첩 클래스, data class & enum class & sealed class (0) | 2024.10.01 |
[Kotlin] 코틀린 적응기 - 접근 제어, object (0) | 2024.10.01 |
[Kotlin] 코틀린 적응기 - 클래스, 상속 (1) | 2024.10.01 |
Comments