-
[Kotlin] 컬렉션 처리, 로컬 함수Computer Science/Kotlin 2021. 1. 20. 00:13
컬렉션 처리
- vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있음
- 중위 함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있음
- 구조 분해 선언을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있음
가변 인자 함수 정의
- 라이브러리에서 listOf 메서드를 보면 다음과 같음
fun listOf<T>(vararg values: T) : list<T> { … }
-
가변 길이 인자는 메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능
-
자바에서는 타입 뒤에 …를 붙이지만 코틀린에는 파라미터 앞에 vararg 변경자를 붙인다
-
이미 배열에 들어있는 원소를 가변 길이 인자로 넘길 때 자바에서는 배열을 그냥 넘기면 되지만 코틀린에서는 배열을 명시적으로 풀어서 배열의 각 원소가 인자자로 전달되게 해야함
-
(*) 스프레드 연산자를 통해 이를 구현
중위 호출
val map = mapOf(1 to
"one", 7 to
"seven", 53 to
"fifty-three")
- map을 만드려면 mapOf 함수를 사용
- 여기서 to는 코틀린의 키워드가 아니고, 중위 호출이라는 특별한 방식으로 to라는 일반 메소드를 호출한 것
- 중위 호출 시에는 수신 객체와 유일한 메소드 인자 사이에 메소드 이름을 넣음
1.to("one")
1 to
"one"
-
위의 두 문장은 같음
-
함수를 중위 호출에 사용하게 허용하고 싶으면 infix 변경자를 함수 선언 앞에 추가해야 함
-
이 to 함수는 Pair의 인스턴스를 반환함
-
Pair의 내용으로 두 변수를 즉시 초기화 가능
-
이런 기능을 구조 분해 선언이라고 함
-
구조 분해 선언을 이용한 for문
로컬 함수
-
코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있음
-
그렇게 하면 문법적인 부가 비용을 들이지 않고도 깔끔하게 코드를 조작할 수 있음
-
saveUser 함수 안에 validate 로컬 함수를 넣어서 name과 address 각각 검증
-
코드 중복을 막을 수 있음
-
로컬 함수 안에서는 자신이 속한 바깥 함수의 모든 파라미터와 변수를 사용할 수 있다
'Computer Science > Kotlin' 카테고리의 다른 글
[Kotlin] 인터페이스, 변경자 (0) 2021.01.20 [Kotlin] 함수 정의와 호출 (0) 2021.01.19 [Kotlin] 코틀린 기초 - 반복문 (0) 2021.01.17 [Kotlin] 코틀린 기초 - 제어문 (0) 2021.01.17 [Kotlin] 코틀린 기초 - 클래스, 프로퍼티 (0) 2021.01.17