hyeals study

[코틀린] 컬렉션 처리 본문

코틀린

[코틀린] 컬렉션 처리

hyeals 2020. 2. 6. 10:41

컬렉션을 처리할 때 쓸 수 있는 코틀린 특성

  1. vararg 키워드: 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있음
  2. 중위(infix) 함수 호출 구문: 인자가 하나뿐인 메소드를 편하게 호출 가능
  3. 구조 분해 선언(destructuring declaration): 복합적인 값을 분해해서 여러 번수에 나눠 담을 수 있음

[가변 인자 함수]

 

: 인자의 개수가 달라질 수 있는 함수

 

가변 인자 함수에 대해 알아보기 위해 리스트를 생성하는 코드가 아래에 있음

 

리스트 생성 예시

여기서 리스트 생성 함수(listOf)가 가변 인자 함수임. (리스트를 생성할 때 원소의 갯수를 원하는 만큼 전달할 수 있기 때문)

 

kotlinlang.org에서 listOf 함수의 정의를 볼 수 있는데 다음과 같음.

listOf 함수 정의

위에 보이는 정의처럼 파라미터 앞에 vararg 키워드가 있는 것을 확인할 수 있음 (자바의 varargs와 비슷)

☞ 함수를 호출할 때 원하는 개수만큼 인자를 넘기면 컴파일러가 알아서 배열에 그 값들을 넣어줌.

 

* 이미 배열에 들어있는 원소를 가변 길이 인자로 넘기려면 넘기려는 배열 앞에 *만 붙이면 됨.

☞ 이 떄 *을 스프레드(spread) 연산자라고 부름.

 

스프레드 연산자 사용 예시

위의 코드처럼 스프레드 연산자를 이용하면 됨.

이 예시는 스프레드 연산자를 이용하면 배열에 들어있는 값과 다른 값을 함께 써서 함수를 호출할 수 있음을 보여줌

(자바에서는 불가능한 기능)


[중위 호출 & 구조 분해 선언]

 

: 중위 호출과 구조 분해 선언은 함수 호출 시 가독성을 향상시켜 줌

 

이를 확인하기 위해 맵(map)을 사용할 것.

 

* 맵을 만들기 위해서는 mapOf 함수를 사용하면 됨.

 

map 생성 예시 (1)

  • 여기서 to는 키워드가 아님.
  • to: 확장 함수
  • 위의 코드는 중위 호출 방식을 이용해서 확장함수 to를 호출한 것임
  • 중위 호출: 수신 객체와 유일한 메소드 인자 사이에 메소드 이름을 넣으면 됨

map 생성 예시 (2)

사실 map 생성 예시(1)은 map 생성 예시(2)와 동일함

 

* 인자가 하나뿐인 일반 메소드나 확장 함수는 중위호출을 사용할 수 있음.

 

to 메소드 정의

to 메소드의 정의는 다음과 같음. 

  • infix 변경자: 중위 호출 사용을 허용한다는 뜻
  • Pair 인스턴스: 코틀린 표준 라이브러리 클래스, 두 원소로 이뤄진 순서쌍을 표현함.

*Pair로 두 변수를 즉시 초기화 할 수 있음

☞ 이 기능을 구조 분해 선언 이라고 부름

구조 분해 선언 예시

위의 코드가 그 예시이며, Pair(1,"one")이라는 뜻임

 

* Pair 인스턴스 외에 다른 객체도 구조 분해에 적용할 수 있음

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments