반응형
Notice
Recent Posts
Recent Comments
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 |
Tags
- 다리를 지나는 트럭
- 고차원 함수
- 스택/큐
- 코딩 테스트
- 알고리즘
- 크론 표현식
- 가장 큰 수
- @Data
- @EnableScheduling
- Java
- 기능개발
- 쿠버네티스
- H-index
- 정렬
- 전화번호 목록
- 프로그래머스
- 스프링 스케쥴러
- K번째수
- 검색 기능 확장
- kubenetes
- @Setter
- 커링
- 루씬 인 액션
- @Getter
- 영속 자료구조
- 모던 자바 인 액션
- 롬복 어노테이션
- 완주하지 못한 선수
- @configuration
- 해시
Archives
- Today
- Total
Today I Learned
콜렉션 사용하기 본문
728x90
콜렉션의 특징
코틀린이 제공하는 편리한 메소드들
- kotiln.collections 패키지에 유용한 함수들이 많이 추가되었다.
- 예를들어 withIndex() 메소드를 사용하면 인덱스와 값 모두를 편하게 얻을 수 있다.
val names = listOf("Tom", "Jerry")
println(names.javaClass)
for ((index, value) in names.withIndex()) {
println("$index $value")
}
뷰
- Java에서 이뮤터블 콜렉션을 변경하려면 runtime에 exception이 발생했다.
- 코틀린에는 기본 콜렉션에 매핑되는 read-only 뷰와 read-write 뷰가 있으며, read-only 뷰에 쓰기를 시도하면 컴파일 단계에서 실패한다.
- read-only 뷰가 스레드 안정성을 제공해주지는 않는다. read-only 뷰가 참조하고 있는 콜렉션은 뮤터블이기 때문이다.
페어와 트리플 사용하기
- 코틀린에는 2개 짜리 튜플인 페어와 3개 짜리 튜플인 트리플이 있다.
println(Pair("Tom", "Jerry")) //(Tom, Jerry)
println(mapOf("Tom" to "Cat", "Jerry" to "Mouse")) //{Tom=Cat, Jerry=Mouse}
- 위와 같이 Pair의 생성자를 이용해 인스턴스를 만들고, to() 확장함수를 이용해서 Map의 엔트리가 될 페어를 만들 수 있다.
객체 배열과 프리미티브 배열
- Array<T> 클래스는 코틀린의 배열을 상징한다.
- arrayOf() 함수를 사용해서 배열을 만들 수 있으며, 인덱스 연산자 []를 이용해서 요소에 접근할 수 있다.
val friends = arrayOf("Tintin", "Snowy", "Haddock", "Calculus")
println(friends::class) //class kotiln.Array
println(frineds.javaClass) //class [Ljava.lang.String;
println("${friends[0]} and ${friends[1]}") //Tintin and Snowy
- 배열의 타입은 kotlin.Array(=Array<T>) 이지만, JVM에서 실행될 때 적용되는 진짜 타입은 String 배열이다.
- 정수 배열을 만들때는 intArrayOf() 함수를 사용하면 Integer 배열로 박싱되지 않고 int 배열로 만들 수 있다.
- IntArray와 같은 타입 특화 배열 클래스에서도 Array<T>에 사용된 연산을 동일하게 사용할 수 있다.
리스트 사용하기
- listOf() 메소드로 이뮤터블 리스트를 만들 수 있다.
- mutableListOf() 메소드는 뮤터블 리스트를 만들 수 있지만, 꼭 필요한 경우만 사용해야 한다.
- 리스트의 요소들에 접근하기 위해 get() 메소드나 인덱스 연산자 []를 사용할 수 있다. 인덱스 연산자가 노이즈가 적고 편리하다.
val fruits: List<String> = listOf("Apple", "Banana", "Grape")
println("frist's ${friuts[0]}, that's ${fruits.get(0)}")
//first's Apple, that's Apple
- 리스트에 다른 요소를 추가하려면 + 연산자를 사용하면 된다.
val fruits2 = fruits + "Orange"
println(fruits) //[Apple, Banana, Grape]
println(fruits2) //[Apple, Banana, Grape, Orange]
- 이 연산은 기존의 리스트를 카피하면서 새로운 리스트를 만들고 새로운 요소를 추가한다.
- 마찬가지로 - 연산자로 기존 리스트에서 특정 요소를 제외한 새로운 리스트를 만들 수 있다.
셋 사용하기
- 셋은 정렬되지 않은 요소의 모음이다.
- setOf(), mutableSetOf(), hashSetOf(), LinkedSetOf(), sortedSetOf() 등을 이용해서 다양한 set의 인스턴스를 만들 수 있다.
- 셋은 중복 요소를 허용하지 않기 때문에 중복된 값은 누락된다.
맵 사용하기
- 맵은 키-값 페어를 보관하는 콜렉션이다.
- set과 마찬가지로 다양한 타입의 map의 인스턴스를 생성할 수 있는 함수들이 있다.
val sites = mapOf("naver" to "https://www.naver.com",
"google" to "https://www.google.com")
println(sites.size) //2
- to() 확장함수를 통해 키-값 페어를 만든다.
- to() 확장함수는 코틀린의 모든 객체에서 사용 가능하고, mapOf()는 Pair<K,V>를 인자로 취급한다.
- containKey(), containValue() 메소드를 통해 맵 안에 키 또는 값이 존재하는 체크할 수 있다.
val naverSite: String = sites.get("naver") //오류
- 위 코드는 동작하지 않는데, get() 메소드는 키가 맵에 없을 경우 nullable 타입을 리턴하기 때문이다.
- 코틀린은 컴파일 시간에 문제를 알려주고, nullable 참조 타입 사용을 권장한다.
val naverSite: String? = sites.get("naver") //오류
- nullable 참조를 피하기 위해 키가 없으면 기본값을 리턴하도록 만들 수도 있다.
val naverSite = sites.getOrDefault("naver", "http://www.example.com")
- 연산자 + 또는 -를 사용해 새로운 맵을 만들 수 있다.
- for 루프를 사용하면 변수에 맵의 요소들을 참조해서 키와 값을 가져올 수 있으며, 구조분해를 이용해서 key와 value를 각각의 요소에 추출해서 사용할 수도 있다.
for(entry in sites) {
println("${entry.key} -- ${entry.value}")
}
for((key, value} in sites) {
println("$key -- $value")
}
728x90
'Kotlin > 다재다능 코틀린 프로그래밍' 카테고리의 다른 글
객체와 클래스 (0) | 2023.08.01 |
---|---|
오류를 예방하는 타입 안정성 (2) (0) | 2023.08.01 |
오류를 예방하는 타입 안정성(1) (0) | 2023.07.27 |
외부 반복과 아큐먼트 매칭 (0) | 2023.07.21 |
Java 개발자를 위한 코틀린 필수 사항 (0) | 2023.07.20 |
Comments