2.4.1 배열 정의하기
배열 구조를 구현하는 가장 일반적인 코틀린 타입은 Array<T>다. 여기서 T는 원소의 타입을 뜻한다. 1장 강력하고 실용적인 코틀린 예제에서는 프로그램에 전달된 인자가 저장되는 Array<String> 타입의 파라미터를 받는 main() 함수를 살펴봤다. 만들려는 배열의 크기를 미리 알 수 있다면 표준 함수 중 하나를 사용해 배열을 생성할 수 있다.
val a = emptyArray<String>() // Array<String> (원소 0개) val b = arrayOf("hello", "world") // Array<String> (원소 두 개) val c = arrayOf(1, 4, 9) // Array<Int> (원소 세 개)
각 함수는 제네릭(generic)하다. 이 말은 호출할 때 원소의 타입을 지정해야 한다는 뜻이다. 하지만 타입 추론 덕분에 두 번째와 세 번째 함수 호출의 타입을 인자들의 타입에서 알아낼 수 있다. 예를 들어 정수로 배열을 만들면 이 배열은 분명 Array<Int> 타입일 것이다. 하지만 첫 번째 호출에서는 컴파일러가 타입을 추론할 수 있는 단초가 없다. 따라서 꺾쇠(<>) 사이에 원소 타입을 명시해야 한다. 지금은 그냥 이런 문법을 그대로 받아들이고 제네릭 타입에 대한 논의는 9장 제네릭스에서 다루자.
인덱스로부터 원소를 만들어내는 방법을 기술해 배열을 생성하는 더 유연한 방법도 있다. 다음 코드는 1부터 사용자가 입력한 값에 이르는 정수의 제곱으로 이뤄진 배열을 만든다.
val size = readLine()!!.toInt() val squares = Array(size) { (it + 1)*(it + 1) }