코틀린 컬렉션 처리

이 글은 Kotlin in Action 서적을 참고했습니다!

1. 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의

리스트를 생성하는 함수를 호출할 때 ex(listOf, arrayListOf(), 등등) 원하는 만큼 원소를 전달할 수 있다.

var list = listOf(1, 2, 3, 4, 5, 6, 7)

listOf() 함수로 들어가보면 다음과 같다.

fun <T> listOf(vararg elements: T): List<T>

vararg << 가변길이인자
메소드를 호출할 때, 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능이다!
코틀린에서는 파라미터 앞에 vararg변경자를 붙인다.

함수에 가변길이 인자 변경자 vararg가 있다면, 스프레드 연산자(*)를 통하여 배열의 내용을 펼쳐진 채로 보내줘야한다!

fun main(args : Array<String>)
   val list = lisOf("args : ", *args) // * << 스프레드 연산자 

만약 vararg 파라미터가 제네릭 타입일 경우, *을 생략해도 Array<out T> 타입은 인자로 받아들일 수 있다.

val test = arrayOf(1, 2, 3, 4)
val test2 = arrayOf(*test) // 가능
val test3 = arrayOf(test) // 가능

값의 쌍 다루기 : 중위 호출과 구조 분해 선언

val map = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three")

여기서 to라는 단어는 코틀린 키워드가 아니다. 중위 호출(infix call)이라는 특별한 방식으로 to라는 메소드를 호출한 것이다!

1.to("one")
1 to "one" 

-> 동일한 결과

중위 호출 시, 수신 객체와 메소드 인자 사이에 메소드 이름을 넣는다
-> 1(수신 객체) to(메소드 이름) "one"(메소드 인자)

인자가 하나뿐인 함수 혹은 하나뿐인 확장 함수에 중위 호출을 사용할 수 있다! infix 변경자를 함수 선언 앞에 추가해주면 된다.

infix fun Any.to(other : Any) = Pair(this, ohter)
-> to 함수의 정의

to 함수는 Pair의 인스턴스를 반환하는데, 이는 두 원소로 이뤄진 순서쌍을 표현한다.

val (number, name) = 1 to "jiwon"
-> 이러한 기능이 구조 분해 선언, 두 변수 즉시 초기화 가능!
-> Log.d("number : ", $number) // 1
-> Log.d("name : ", name) // jiwon

구조 분해가 작동하는 과정


to함수의 반환값이 Pair여서 순서쌍을 만든 후, 구조 분해를 통해 순서쌍을 푼다!

좋은 웹페이지 즐겨찾기