2024. 2. 2. 12:44ㆍ코틀린
이전에도 이에 관련돼서 정리해왔지만 좀더 추가적인 공부가 필요한거 같아서 검색하고 강의를 들었다!
흐음 복습하는 마음으로 한 번 더 정리해보고자 한다 ㅋㅋㅠㅠ
Collection
자주 사용되는 기초적인 자료구조를 모아놓은 일종의 프레임워크로 표준 라이브러리로 제공한다.
이때, 자료구조란 자료를 다루기 위한 트리, 정렬, 검색 등을 다루는 전산학의 기초 중의 기초를 뜻한다.
코틀린의 컬렉션
컬렉션 종류로는 List, Set, Map 등이 있으며 자바와는 다르게 불변형과 가변형으로 나뉘어 컬렉션을 다룰 수 있다.
컬렉션 | 불변형(읽기전용) | 가변형 |
List | listOf | mutableListOf,arrayListOf |
Set | setOf | mutableSetOf,hashSetOf,linkedSetOf,sortedSetOf |
Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf,sortedMapOf |
다이어그램 가장 상위의 Iterable(여러 데이터를 반복적으로 나타내기 위함) 인터페이스는 컬렉션이 연속적인 요소를 표현할 수 있게 한다.
Collection 인터페이스의 특징
Iterable로부터 확장되며 불변형이므로 Collection로부터 확장된 Set 과 List는 읽기 전용의 컬렉션이 된다.
멤버 | 설명 |
size | 컬렉션의 크기를 나타낸다. |
isEmpty() | 컬렉션이 비어 있는 경우 true를 반환한다. |
contains(element:E) | 특정 요소가 있다면 true를 반환한다. |
containsAll(element: Collection<E> ) | 인자로 받아들인 Collection이 있다면 true를 반환한다. |
MuutableIterable 과 MutableCollection 인터페이스의 특징
가변형 컬렉션을 지원하기 위해 준비된 인터페이스로 요소를 추가하거나 제거하는 등의 기능을 수행 할 수 있다.
멤버 메소드 | |
add (element:E) | 인자로 전달받은 요소를 추가하고 true를 반환하며, 이미 요소가 있거나 중복이 허용되지 않으면 false를 반환한다. |
remove (element:E) | 인자로 받은 요소를 삭제하고 true를 반환하며,삭제하려는 요소가 없다면 false를 반환한다. |
addAll( elements:Collection<E>) | 컬렉션을 인자로 전달받아 모든 요소를 추가하고 true를 반환하면, 실패시 false를 반환한다. |
removeAll( elements:Collection<E>) | 컬렉션을 인자로 전달받아 모든 요소를 삭제하고 true를 반환하며, 실패시 false를 반환한다. |
retainAll( elements:Collection<E>) | 인자로 전달받은 컬렉션의 요소만 보유한다. 성공시 true를 바환하고 실패시 false를 반환한다. |
clear() | 컬렉션의 모든 요소를 삭제한다. |
여기서 remove와 clear의 차이는 clear는 내부 요소를 삭제하는 것이지만, remove는 true 값을 반환한다는 점이다.
List?
순서에 따라 정렬된 요소를 가지는 컬렉션으로 가장 많이 사용되는 컬렉션 중에 하나이다. 값을 변경 할 수 없는 불변형 List를 만들기 위해서는 헬퍼 함수인 listof()를 사용하고 값을 변경할 수 있는 가변형을 표현하기 위해서는 mutableListof()를 사용한다...
인자는 원하는 만큼의 가변 인자를 가지도록 vararg로 선언 가능하다..
이때, 헬퍼 함수는 무엇일까?
객체 생성 할 시 요소를 직접 선언하는 것보다 특정 함수의 도움을 받아 생성하는 것을 뜻한다!!
헬퍼 함수 listof()의 원형
public fun <T> listof(vararg elements: T) : List<T>
vararg 는 가변 인자를 받을 수 있기 때문에 원하는 만큼의 요소를 지정할 수 있고 값을 반환할 떄는 List<T>를 사용한다. 형식 매개변수 <T>는 필요에 따라 원하는 자료형을 지정해 선언하며 만약 사용하지 않는다면 <Any>가 기본값으로 어떤 자료형이든 혼합 사용이 가능하다.
for과 indices를 사용해서 컬렉션을 접근합니다..
val fruits = listOf("apple","banana","kiwi")
//for와 in을 사용한 출력
for(item in fruits){
println(item)
}
apple
banana
kiwi
의 값이 나온다.
val fruits = listOf("apple","banana","kiwi")
//인덱스와 함께 출력
for (index in fruits.indices){ // 인덱스 지정
println("fruits[$index] = ${fruits[index]}")
}
fruits[0] = apple
fruits[1] = banana
fruits[2] = kiwi
indices를 이용하면 이처럼 나온다!
기타 List 생성 함수
emptyList() 함수
빈 리스트를 생성한다.
val emptyList: List<String> = emptyList<String>()
listOfNotNull() 함수
null을 제외한 요소만 반환한다.
//null 이 아닌 요소만 골라 컬렉션을 초기화한다.
val nunNullsList: List<Int> = listofNotNull(2,45,2,null,5,null)
println(nonNullsList)
// [2,45,2,5]
추가 멤버 메소드들
멤버 메소드 | 설명 |
get(index: Int) | 특정 인덱스를 인자로 받아 해당 요소를 반환한다. |
indexof(element: E) | 인자로 받은 요소가 첫 번째로 나타나는 인덱스를 반환하며, 없으면 -1을 반환한다. |
lastIndexof(element: E) | 인자로 받은 요소가 마지막으로 나타나는 인덱스를 반환하며, 없으면 -1을 반환한다. |
listIterator() | 목록에 있는 iterator를 반환한다. |
subList(fromIndex: Int, toIndex: Int) | 특정 인덱스의 from과 to 범위에 있는 요소 목록을 반환한다. |
arrayListof() 함수/ MutableListOf() 함수
가변형 헬퍼 함수를 사용하면 손쉽게 요소를 추가하거나 삭제할 수 있다.
arrayListof()는 가변형 List를 생성하지만 반환자료형은 자바의 ArrayList로 반환된다.
public fun <T> arrayListof(vararg elements: T) : ArrayList<T>
public fun <T> MutableListOf(vararg elements: T) : MutableList<T>
toMutableList() 로 변경하는 방법
fun main() {
val names: List<String> = listOf("one","two","three")// 불변형 List 초기화
val mutableNames = names.toMutableList() // 새로운 가변형 List 만들어짐
mutableNames.add("four") // 가변형 List에 하나의 요소 추가
println(mutableNames)
}
List와 차이점
-Array 클래스에 의해 생성되는 배열 객체는 내부 구조상 고정된 크기를 가진다.
-코틀린의 List<T>와 MutableList<T>는 인터페이스로 설계되어 있고 이것을 하위에서 특정한 자료구조로 구현
<LinkedList<T>, ArrayList<T> 고정 된 크기의 메모리가 아니기 때문에 자료구조에 따라 늘리거나 줄이는 것이 가능하다.>
-Array<T>는 제네릭 관점에서 상/하위 자료형 관계가 성립하지 않는 무변성이다.
-List<T>는 공변성이기 때문에 하위인 List<Int> 가 List<Number>에 지정되어있다.
휴ㅠ휴ㅠㅠ 정리하는 거조차 빧세군 다시 주말내내 읽어봐야겠다..
'코틀린' 카테고리의 다른 글
TIL 20240204 - 컬렉션의 확장 함수 (0) | 2024.02.04 |
---|---|
TIL 20240202 - Set과 Map (0) | 2024.02.02 |
TIL 20240201 - 문자열 (2) | 2024.02.01 |
TIL 20240131 - 배열 (0) | 2024.01.31 |
TIL 20240130 - 제네릭(Generic) (0) | 2024.01.30 |