카테고리 없음
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에서 자세히 다뤄볼 예정입니다.
강의를 수강하면 알겠는데, 질문을 던지면 답을 못하겠으니 개념을 조금씩 뜯어봐야겠습니다.
내일도 화이팅