카테고리 없음

2024-04-22 [Kotlin_Collection( List / Map )]

Glen_check 2024. 4. 22. 21:14

Collection(List, Map) 개념, 선언 방법, 예시 등 복습 진행

 

1. Collection 개념 복습

  • Collection은 데이터를 수집하거나 그룹화하는 자료 구조로, Kotlin에서는 주로 List와 Map, Set를 사용
  • 자료 구조에 나오는 다양한 데이터 관리 기법을 사용할 수 있도록 제공하고 있는 라이브러리
  • List: 순서가 있는 데이터의 목록으로, 중복된 값 포함 가능
  • Map: 키와 값의 쌍으로 이루어진 데이터 구조로, 모든 값은 고유한 키를 가지고 있음

 

2. List

  • 목록은 순서가 지정되고 크기 조절이 가능한 컬렉션으로, 일반적으로 크기 조절 가능한 배열(MutableList)로 구현, 배열이 용량까지 채워졌는데 새 요소를 삽입하려고 하면 아래 이미지와 같이 배열이 더 큰 새 배열에 복사

  • 목록을 사용하면 특정 색인의 다른 요소 사이에 새 요소를 삽입 가능

  • List는 순서가 있는 데이터의 컬렉션으로, Kotlin에서 List는 변경 가능한 *MutableList*와 변경 불가능한 *List*로 분류(MutableList는 요소를 추가하거나 제거할 수 있으며, List는 요소를 읽기만 가능하며 크기 변경 불가능)
  • 리스트는 배열과 동일하게 Index 번호를 통해 객체를 관리 (인덱스는 배열과 동일하게 0번부터 시작)

2-1. List 생성

  • listOf : 불변형 리스트 생성
  • mutableListOf : 가변형 리스트 생성 (불변형에 비해 느리고 메모리 多)
  • emptyList : 비어있는 불변형 리스트를 생성
  • listOfNotNull : null을 제외한 나머지만으로 리스트를 생성
// Kotlin

val name = listOf("Hong", "Kim", "Park", "Lee")
val name = mutablelistOf("Hong", "Kim", "Park", "Lee")
val empty = emptyList()
// val 변수명 = List 생성방식

val mutableList: MutableList<Int> = mutableListOf(1, 2, 3)
val immutableList: List<String> = listOf("apple", "banana", "orange")
// val 변수명 : list<데이터 타입> = List 생성방식

 

  • 다음과 같이 데이터 타입을 지정해 주면서 List를 생성할 수도 있고, 별도의 데이터 타입 설정 없이 생성 가능

(제네릭은 추론이 가능하면 생락이 가능하다)

 

2-2. List 요소 접근

  • List[index]를 사용하여 특정 인덱스의 요소에 접근할 수 있고, get 활용해서도 추출이 가능
val list = listOf(1, 2, 3, 4, 5)

println(list.get(0)) // 1
println(list[1]) // 2

 

  • 다음과 같이 firstElement라는 변수를 생성하고, List 변수명 뒤 [index]를 적어 접근 가능
val firstElement = mutableList[0]  // 1

 

2-3. List 요소 추가, 제거 및 대체 (MutableList의 메서드)

  • add(객체) : 객체를 추가
  • add(인덱스, 객체) : 주어진 인덱스 위치에 객체를 삽입
  • remove(객체) : 주어진 객체를 제거
  • removeAt(인덱스) : 주어진 인덱스의 객체를 제거
  • set(인덱스, 객체) : 주어진 인덱스에 객체를 덮어씌움
mutableList.add(4)     // 요소 추가
mutableList.removeAt(1)  // 인덱스 1의 요소 제거

 

3. Map

  • Map은 키와 값의 쌍으로 이루어진 자료구조로, 각 키는 유일하며, 키를 통해 값을 찾을 수 있습니다.

3-1. Map 생성

  • mapOf : 불변형 Map을 생성
  • mutableMapOf : 가변형 Map을 생성
// Kotlin
val map1 = mapOf("Key1" to 10, "key2" to 20, "key3" to 30)
val fruitCounts: Map<String, Int> = mutableMapOf("apple" to 5, "banana" to 3, "orange" to 8)

 

3-2. Map 요소 접근

  • get을 통해 객체를 추출할 수 있고, Kotlin의 Map은 []을 사용해도 추출이 가능
println("map1 key1 : ${map1.get("key1")}")
println("map2 key1 : ${map1["key2"]}")
  • 다음과 같이 appleCount라는 변수를 생성하고, Map 변수명 뒤 ["Key"]를 적어 접근 가능
val appleCount = map["apple"]  // 5

 

3-3. Map 요소 추가, 제거 및 대체 (MutableMap의 메서드)

  • put : 객체를 추가하며, 기존 이름과 동일한 경우 덮어씌운다
  • remove : 주어진 이름으로 저장된 객체를 제거
//Kotlin

// 기존 kiwi라는 key가 없었기 때문에 새로운 값을 추가
fruitCounts["kiwi"] = 13
fruitCounts.put("kiwi", 13)

// 이미 있는 키에 새로운 값 할당
fruitCounts["banana"] = 10
fruitCounts.put("banana", 10)

// 값 제거
fruitCounts.remove("banana")

 

Collection끼리 변환할 때 활용하는 고차함수와 람다 표현식 관련 다음 TIL에서 자세히 다뤄볼 예정입니다.

강의를 수강하면 알겠는데, 질문을 던지면 답을 못하겠으니 개념을 조금씩 뜯어봐야겠습니다.

내일도 화이팅