hyeals study
[코틀린] 컬렉션 처리 본문
컬렉션을 처리할 때 쓸 수 있는 코틀린 특성
- vararg 키워드: 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있음
- 중위(infix) 함수 호출 구문: 인자가 하나뿐인 메소드를 편하게 호출 가능
- 구조 분해 선언(destructuring declaration): 복합적인 값을 분해해서 여러 번수에 나눠 담을 수 있음
[가변 인자 함수]
: 인자의 개수가 달라질 수 있는 함수
가변 인자 함수에 대해 알아보기 위해 리스트를 생성하는 코드가 아래에 있음
여기서 리스트 생성 함수(listOf)가 가변 인자 함수임. (리스트를 생성할 때 원소의 갯수를 원하는 만큼 전달할 수 있기 때문)
kotlinlang.org에서 listOf 함수의 정의를 볼 수 있는데 다음과 같음.
위에 보이는 정의처럼 파라미터 앞에 vararg 키워드가 있는 것을 확인할 수 있음 (자바의 varargs와 비슷)
☞ 함수를 호출할 때 원하는 개수만큼 인자를 넘기면 컴파일러가 알아서 배열에 그 값들을 넣어줌.
* 이미 배열에 들어있는 원소를 가변 길이 인자로 넘기려면 넘기려는 배열 앞에 *만 붙이면 됨.
☞ 이 떄 *을 스프레드(spread) 연산자라고 부름.
위의 코드처럼 스프레드 연산자를 이용하면 됨.
이 예시는 스프레드 연산자를 이용하면 배열에 들어있는 값과 다른 값을 함께 써서 함수를 호출할 수 있음을 보여줌
(자바에서는 불가능한 기능)
[중위 호출 & 구조 분해 선언]
: 중위 호출과 구조 분해 선언은 함수 호출 시 가독성을 향상시켜 줌
이를 확인하기 위해 맵(map)을 사용할 것.
* 맵을 만들기 위해서는 mapOf 함수를 사용하면 됨.
- 여기서 to는 키워드가 아님.
- to: 확장 함수
- 위의 코드는 중위 호출 방식을 이용해서 확장함수 to를 호출한 것임
- 중위 호출: 수신 객체와 유일한 메소드 인자 사이에 메소드 이름을 넣으면 됨
사실 map 생성 예시(1)은 map 생성 예시(2)와 동일함
* 인자가 하나뿐인 일반 메소드나 확장 함수는 중위호출을 사용할 수 있음.
to 메소드의 정의는 다음과 같음.
- infix 변경자: 중위 호출 사용을 허용한다는 뜻
- Pair 인스턴스: 코틀린 표준 라이브러리 클래스, 두 원소로 이뤄진 순서쌍을 표현함.
*Pair로 두 변수를 즉시 초기화 할 수 있음
☞ 이 기능을 구조 분해 선언 이라고 부름
위의 코드가 그 예시이며, Pair(1,"one")이라는 뜻임
* Pair 인스턴스 외에 다른 객체도 구조 분해에 적용할 수 있음
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
[코틀린] 클래스 계층 정의 (0) | 2020.02.18 |
---|---|
[코틀린] 로컬 함수 (0) | 2020.02.07 |
[코틀린] 확장함수 & 확장 프로퍼티 (0) | 2020.02.05 |
[코틀린] 함수를 호출하기 쉽게 만들기 (0) | 2020.02.05 |
[코틀린] 컬렉션(Collection) 만들기 (0) | 2020.02.05 |