728x90
반응형
코틀린에서 컬렉션 만들기
컬렉션을 만드는 방법은 자바와 비슷함
val set = hashSetOf(1, 7, 53)
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")
코틀린이 자체 컬렉션을 제공하지 않는 이유?
표준 자바 컬렉션을 활용하면 자바 코드와 상호작용하기가 훨씬 더 쉽기 때문
때문에 자바에서 코틀린 함수를 호출하거나 코틀린에서 자바 함수를 호출할 때 자바와 코틀린 컬렉션을 서로 변환할 필요가 없음
하지만 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있음
fun main(args: Array<String>) {
val strings = listOf("first", "second", "fourteenth")
println(strings.last()) // 리스트의 마지막 원소를 가져온다.
val numbers = setOf(1, 14, 2)
println(numbers.max()) // 컬렉션에서 최댓값을 가져온다.
}
함수를 호출하기 쉽게 만들기
자바 컬렉션에는 컬렉션에는 디폴트 toString 구현이 들어있음
val list = listOf(1, 2, 3)
println(list)
// [1, 2, 3]
디폴트 구현과 달리 (1; 2; 3)처럼 원소 사이를 세미콜론으로 구분하고 괄호로 리스트를 둘러싸고 싶다면?
처음에는 함수 선언을 간단하게 만들수 있게 코틀린이 지원하는 여러 기능을 사용하지 않고 함수를 직접 구현함
그 후 좀 더 코틀린답게 같은 함수를 다시 구현함
fun <T> joinToString(
collection: Collection<T>,
separator: String = ";",
prefix: String = "(",
postfix: String = ")"
): String {
val result = StringBuilder(prefix)
for ((index, element) in collection.withIndex()) {
if (index > 0) result.append(separator)
result.append(element)
}
result.append(postfix)
return result.toString()
}
fun main(args: Array<String>) {
val list = listOf(1, 2, 3)
println(joinToString(list, "; ", "(", ")"))
println(joinToString(collection = list, separator = ";", prefix = "(", postfix = ")"))
println(joinToString(list))
println(joinToString(list, "; "))
}
이 함수는 어떤 타입의 값을 원소로 하는 컬렉션이든 처리할 수 있음
제네릭 함수의 문법은 자바와 비슷함
더보기
💡 디폴트 값과 자바
자바에는 디폴트 파라미터 값이라는 개념이 없어서 코틀린 함수를 자바에서 호출하는 경우에는 그 코틀린 함수가 디폴트 파라미터 값을 제공하더라도 모든 인자를 명시해야 함
자바에서 코틀린 함수를 자주 호출해야 한다면 자바 쪽에서 좀 더 편하게 코틀린 함수를 호출하고 싶을 것임
그럴 때 @JvmOverloads 애노테이션을 함수에 추가할 수 있음
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
코틀린에서 자주 사용하는 문법 String Template (0) | 2022.01.21 |
---|---|
확장 함수와 확장 프로퍼티 (0) | 2022.01.20 |
코틀린의 예외 처리 (0) | 2022.01.12 |
코틀린 기초(while과 for) (0) | 2022.01.11 |
코틀린 기초(enum과 when) (0) | 2022.01.10 |