3.4 컬렉션 처리: 가변 길이인자, 중위 함수 호출, 라이브러리 지원
- 컬렉션 처리시 코틀린의 특성
- vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다.
- 중위(infix)함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다.
- 구조 분해 선언 (destructuring declaration)을 사용하면 복합적인 값을 분해해서 여러변수에 담을 수 있다.
3.4.1 자바 컬렉션 API확장
- 코틀린은 확장함수로 자바 컬렉션 API를 확장한다
- 코틀린 표준 라이브러리에는 수 많은 확장함수를 이미 가지고 있다
3.4.2 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의
- 가변길이 인자
- 메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 값을 넣어주는 기능
코틀린에서는 자바의 타입뒤 ... 대신 파라미터 앞에 vararg붙인다
val list = listOf(1,2,3,4)
// listOf 함수 정의
fun listOf<T> (vararg values: T): List<T> {
...
}
// 배열에 들어있는 원소를 가변 길이 인자로 넘길 때 명시적이여야 한다
// 전달하려는 배열앞에 *을 붙여 명시
fun main(args: Array<String>) {
val list = listOf("args: ", *args) // 스프레드 연산자가 배열의 내용을 펼쳐준다.
println(list)
}
>>>
[args: , a, b, c]
3.4.3 값의 쌍 다루기: 중위 호출과 구조 분해 선언
fun main() {
val mapInfix = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three") // 중위 호출
val map = mapOf(1.to("one"), 7.to("seven"), 53.to("fifty-three")) // 일반호출 to method
}
// to 메서드의 정의를 간략히 줄인 코드
infix fun Any.to(other: Any) = pair(this, other)
fun pair() {
// pair의 내용으로 두 변수를 즉히 초기화 가능
// 이런 기능을 구조분해 선언이라고 부른다
val (number, name) = 1 to "one"
}
- 인자가 하나뿐인 일반 메소드나, 인자가 하나뿐인 확장 함수에 사용 가능하다
- 중위 호출 시에는 수신객체와 유일한 메소드 인자사이에 메소드 이름을 넣는다
'발전로그 > 책장로그-개발' 카테고리의 다른 글
클린 아키텍처 - 소프트웨어 구조와 설계의 원칙 02 4장 (0) | 2022.06.05 |
---|---|
kotlin in action 03 (3.5~3.7) (0) | 2022.03.01 |
kotlin in action 03 (3.3) (0) | 2022.02.16 |
kotlin in action 03 (3.1 ~ 3.2) (0) | 2022.02.15 |
kotlin in action 02 (5) | 2022.01.24 |