코틀린 Collection

Ham's Velog·2022년 6월 11일
2
post-thumbnail

Collection 소개

📢 코틀린의 Collection 이란?
→ 연관있는 자료들을 모아두는 자료구조. 기본적으로 자바 컬렉션의 배경에서 확장된 형태. 자바와 달리 불변형과 가변형으로 나뉜다.

자료구조란?
→ 프로그램에 필요한 자료들을 보여주거나 검색, 정렬하는 것

*불변형 : (영)Immutable → 변하지 않는.

*가변형 : (영)Mutable → 변할수 있는.


Collection의 종류


📢 들어가기에 앞서 헬퍼함수를 먼저 알아보자.

헬퍼함수?
→ 컬렉션을 선언할 때 프로그래머가 직접 선언하는것이 아닌 정해진 특정 함수를 통해 선언하는것.

List Collection

📋 List는 순서에 따라 요소가 정렬되며 값의 중복을 허용한다. 값의 변경이 불가능한(불변형) List를 선언할 때는 헬퍼함수 listOf()를 사용하고, 값의 변경이 가능한(가변형) List를 선언할 때는 mutableListOf() / arrayListOf()를 사용한다.

불변형 - listOf

fun main() {
	val number: List<Int> = 
		listOf(1, 2, 3, 4) // Int형 List
	val string: List<String> = 
		listOf("1", "2", "3", "4") // String형 List
	val painter: List<Painter> = 
		listOf(R.drawable.nyung, R.drawable.nyang) // Painter형 List
	...
}

➡ listOf는 불변형을 가지고 있다. 이는 listOf로 선언된 변수안의 값을 변경, 추가, 삭제할 수가 없다.

가변형 - mutableListOf / arrayListOf

fun main() {
	val strList: MutableList<String> = 
		mutableListOf<String>("one", "two", "three") // String형 MutableList
	val intList: ArrayList<Int> = 
		arrayListOf<Int>(4, 5, 6) // Int형 ArrayList
	
	val mixList =	mutableListOf("seven", 8, "nine") // String형과 Int형을 같이 사용 가능
	...
}

➡ mutableListOf / arrayListOf는 가변형을 가지고 있다. 이는 mutableListOf /arrayListOf로 선언된 변수안의 값을 변경, 추가, 삭제할 수 있다. 두 함수의 차이는 mutableListOf는 MutableList를 반환하고 arrayListOf는 ArrayList를 반환한다. arrayListOf가 알고리즘에서 더 빠르다. 코틀린에서는 따로 스택 구조를 안쓰기 때문이다.

  • 추가 : add()
  • 삭제 : mutableListOf로 선언된 변수 → removeAt() / arrayListOf로 선언된 변수 → remove()
  • 변경 : 인덱스에 직접 접근하여 요소 변경 가능
    → EX) strList[0] = 3 // 실행 결과 strList에 담겨져 있는 값은 3, “two”, “three”

ListCollection 내장함수

함수기능
size()리스트 사이즈 변환
get(*index)해당 인덱스의 요소 가져오기
indexOf(*Element)해당 요소의 인덱스 번호 반환
contains(Element)해당 요소가 있으면 true / 없으면 false 반환
isEmpty()리스트가 비어있으면 true / 아니면 false 반환

*index : 인덱스

*Element : 요소

fun main() {
	var list: ListOf<String> = listOf("1", "2", "3")

	println(list.size()) // 3
	println(list.get(0)) // "1"
	println(list.indexOf("2")) // 1
	println(list.contains("4")) // false
	println(list.isEmpty()) // false

	...
}

Set Collection

📋 Set은 정해진 순서가 없는 상태로 요소들의 집합을 나열하는 컬렉션이다. List와 달리 중복을 허용하지 않는다. 값의 변경이 불가능한(불변형) 헬퍼함수로 setOf()와 값의 변경이 가능한(가변형) 헬퍼함수 mutableSetOf() / hashSetOf() / linkedSetOf() / sortedSetOf() 가 있다.

불변형 - setOf()

fun main() {
	val mixSet = setOf("one", 2, "three") // String형과 Int형을 같이 사용 가능
	val strSet: Set<String> = setOf("four", "five", "six") // String형
	val intSet: Set<Int> = setOf(7, 8, 9, 9) // Int형

	println(intSet) // [7, 8, 9] 가 결과 값으로 나온다.
	...
}

➡ setOf()는 불변형을 가지고 있다. 값의 추가, 변경, 삭제가 불가능하다. intSet을 선언했을 경우 요소가 중복이 되어 있어 기 때문에 중복된 요소는 처음 선언했을 때 한번만 저장한다.

가변형 - mutableSetOf()

fun main() {
	val strSet: MutableSet<String> = mutableSetOf("one", "two", "three") // String형
  val intSet: MutableSet<Int> = mutableSetOf(4, 5, 6) // Int형
  val mixSet = mutableSetOf("seven", 8, "nine") // mix형

	...
}

➡ mutableSetOf()는 가변형을 가지고 있다. 값의 추가, 삭제가 가능하다. 마찬가지로 중복된 요소는 처음 선언했을 때 한번만 저장한다.

  • 추가 : add()
  • 삭제 : remove()

Set Collection 내장 함수

함수기능
size()set 사이즈 변환
indexOf(Element)해당 요소의 인덱스 번호 반환
contains(Element)해당 요소가 있으면 true / 없으면 false 반환
isEmpty()set이 비어 있으면 true / 비어 있지 않으면 false
clear()모든 요소를 제거

Map Collection

📋 map은 key - value 로 구성되어 있는 컬렉션이다. key와 value 는 중복을 허용한다. 불변형으로 사용할땐 헬퍼함수 mapOf()를 사용하고 가변형으로 사용할땐 mutableMapOf()를 사용한다.

key가 중복이 될 경우 마지막에 선언된 value의 값으로 덮어씌어진다.
value가 중복이 될 경우 key가 다를 경우 따로 저장이된다.

불변형 - mapOf()

fun main() {
	val strIntMap: Map<String, Int> = 
		mapOf("one" to 1, "two" to 2, "three" to 3) // "one"은 key, 1은 value...

	val strAnyMap: Map<String, Any?> = 
		mapOf("four" to 4, "사" to 4, "five" to null) 
		// key 혹은 value에 null 값도 들어 갈 수 있다..
		// key가 다르면 value의 값이 중복이 될 수 있다.
	...
}

➡ mapOf()는 불변형을 가진다. key와 value 둘 다 추가, 삭제, 변경이 불가능하다.

가변형 - mutableMapOf()

fun main() {
	val strMapOf: MutableMap<String, String?> = 
			mutableMapOf("one" to "one", "two" to null, "three" to "one")
			// ["one" = "one, "two" = null, "three" = "one"] 을 저장

	...
}

➡ mutableMapOf()는 가변형을 가진다. key와 value 둘 다 추가, 삭제, 변경이 가능하다.

  • 추가 : put(key, value)
  • 삭제 : remove(key)
  • 변경 : 인덱스에 key를 넣고 바꾸려는 value 값을 넣는다.
    → EX) strMap[”one”] = “oneeee”

Map Collection 내장 함수

함수기능
size()map의 크기를 반환
get(key)key에 해당하는 value를 반환
contains(key)해당키가 있으면 true / 없으면 false 반환
isEmpty()map이 비어있으면 true / 비어있지않으면 false 반환
clear()모든 key, value 삭제

✅ 코틀린의 다른것이 궁금할땐 아래 링크 확인
@evergreen_tree

profile
#안드로이드개발자

1개의 댓글

comment-user-thumbnail
2022년 6월 11일

좋은 글 감사합니다!

답글 달기