Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- VARCHAR (1)
- Spring Batch
- pytest
- 오블완
- kotlin
- 개성국밥
- k8s #kubernetes #쿠버네티스
- mp4fpsmod
- terminal
- Value too long for column
- 깡돼후
- 자원부족
- taint
- 달인막창
- JanusWebRTCGateway
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 겨울 부산
- 티스토리챌린지
- tolerated
- 코루틴 빌더
- preemption #
- JanusWebRTC
- JanusWebRTCServer
- table not found
- JanusGateway
- vfr video
- PytestPluginManager
- 코루틴 컨텍스트
- python
- PersistenceContext
Archives
너와 나의 스토리
[Kotlin] 컬렉션과 배열 본문
반응형
컬렉션과 배열
코틀린 컬렉션은 자바 라이브러리를 바탕으로 만들어졌고 확장 함수를 통해 기능을 추가한다.
널 가능성과 컬렉션
- 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻인 것처럼 타입 인자로 쓰인 타입에도 같은 표시를 사용할 수 있다.
val numbers1 = ArrayList<Int>()? // numbers1이 null이 될 수 있다.
val numbers2 = ArrayList<Int?>() // 컬렉션 안에 null 값을 넣을 수 있다.
val numbers3 = ArrayList<Int?>()? // 널이 될 수 있는 값으로 이뤄진 널이 될 수 있는 리스트
- filterNotNull(): 컬렉션에서 널 값을 걸러내는 함수
fun addValidNumbers(numbers: List<Int?>) {
val validNumbers = numbers.filterNotNull() // validNumbers는 List<Int> 타입이 됨
println("Sum of valid numbers: ${validNumbers.sum()}")
}
읽기 전용과 변경 가능한 컬렉션
- 코틀린에서는 컬렉션 안의 데이터에 접근하는 인터페이스와 컬렉션 안의 데이터를 변경하는 인터페이스를 분리했다.
- 데이터에 접근: kotlin.collections.Collection
- 데이터 변경: kotlin.collections.MutableCollection
- 기본적으로 코틀린 컬렉션은 불변이다.
- 코드에서 가능하면 항상 읽기 전용 인터페이스를 사용하는 것을 일반적인 규칙으로 삼는 게 좋다.
- 다음의 예제와 같이, collection 타입을 명시적으로 보여줌에 따라 source 변수는 읽기 전용임을 알릴 수 있다.
val source: Collection<Int> = arrayListOf(3, 5, 6)
println("size of source: ${source.size}")
객체의 배열과 원시 타입의 배열
- 코틀린 배열
fun main(args: Array<String>) {
for (i in args.indices) {
println("Argument $i is: ${args[i]}")
}
}
- 코틀린에서 배열을 만드는 방법:
- arrayOf 함수에 원소를 넘기기
- arrayOfNulls 함수에 정수 값을 인자로 넘기면 모든 원소가 null이고 이자로 넘긴 값과 크기가 같은 배열을 만들 수 있다.
- Array 생성자에 배열 크기와 람다를 인자로 넘기기
- 널이 아닌 배열로 초기화 가능
-
val letters = Array<String>(26) { i -> ('a' + i).toString() } println(letters.joinToString("")) // output: abcdefghijklmnopqrstuvwxyz
- 컬렉션을 배열로 변환하기
- toTypedArray 메서드 사용
-
val strings = listOf("a", "b", "c") println("%s/%s/%s".format(*strings.toTypedArray())) // output: a/b/c
- 다른 제네릭 타입에서처럼 배열 타입의 타입 인자도 항상 객체 타입이 된다.
- 객체 타입으로 박싱하지 않은 원시 타입의 배열이 필요하다면 그런 타입을 위한 특별한 배열 클래스를 사용해야 한다.
- 코틀린은 원시 타입의 배열을 표현하는 별도 클래스를 각 원시 타입마다 하나씩 제공한다.
- 예를 들어, Int 타입의 배열은 IntArray다.
- ByteArray, CharArray, BooleanArray 등 제공
- 원시 타입인 원소로 이뤄진 배열에도 확장 함수(filter, map)를 똑같이 사용할 수 있다.
- 다만 이런 함수가 반환하는 값은 배열이 아니라 리스트이다.
출처:
- [Kotlin IN ACTION]
반응형
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] 위임 프로퍼티(delegated property) / by lazy()를 사용한 초기화 지연 / lateinit (0) | 2021.06.29 |
---|---|
[Kotlin] 연산자 오버로딩 (0) | 2021.06.22 |
[Kotlin] 코틀린의 원시 타입 (1) | 2021.06.18 |
[Kotlin] 코틀린 타입 시스템 - ? / !! /.? / as? / let 함수 / lateinit (0) | 2021.06.17 |
[Kotlin] 람다 식(lambda expression)과 멤버 참조 (0) | 2021.06.16 |
Comments