코틀린 (Kotlin) 리스트, 가변 인자, 중위 호출, 구조 분해
코틀린 리스트
코틀린의 리스트는 listOf(...) 으로 생성할 수 있습니다그리고 setOf(...) 로 Collection 을 생성할 수도 있습니다.
val strings: List<String> = listOf("1","2","3")
strings.last() //last() 는 확장 함수
val numbers: Collection<Int> = setOf(1,10,100)
numbers.max() //max() 는 확장 함수
strings.last() //last() 는 확장 함수
val numbers: Collection<Int> = setOf(1,10,100)
numbers.max() //max() 는 확장 함수
가변 인자 함수
자바에서는 가변 인자로 'String ...' 을 사용합니다.코틀린에서는 vararg 변경자를 붙입니다.
varag 의 배열을 펼치기 위해서는 *(스프레드) 연산자를 이용할 수 있습니다
//자바
public static void main(String... args) { ... }
//코틀린
fun main(vararg values: String) {
val list = listOf("list=", *values) //*연산자가 배열 내용을 펼쳐줍니다
println(list)
}
main("a","b","c") //"[list=, a, b]" 출력
public static void main(String... args) { ... }
//코틀린
fun main(vararg values: String) {
val list = listOf("list=", *values) //*연산자가 배열 내용을 펼쳐줍니다
println(list)
}
main("a","b","c") //"[list=, a, b]" 출력
중위 호출
1 to "one" 처럼 to 를 중간에 사용하는 것을 중위 호출이라고 합니다.이때 to 는 일반 메소드입니다.
'객체 메소드이름 유일인자' 사이에는 공백이 들어가야 합니다.
val mapData = mapOf(
1 to "one", //1(객체) to(메소드이름), "one"(유일한 인자)
2 to "two", //to 메소드를 공백으로 구분하여 사용 가능
3.to("three") //to는 메소드이기때문에 .to(...) 로도 사용 가능
)
1 to "one", //1(객체) to(메소드이름), "one"(유일한 인자)
2 to "two", //to 메소드를 공백으로 구분하여 사용 가능
3.to("three") //to는 메소드이기때문에 .to(...) 로도 사용 가능
)
일반 메소드를 중위 호출이 가능하도록 만드려면 infix 변경자를 메소드 앞에 추가해야 됩니다.
infix 변경자의 인수는 한개만 가능합니다.
//infix 를 사용한 중위 호출 생성
infix fun Any.to(other:Any) = Pair(this, other)
//잘못된 사용. 컴파일 에러. 인수는 한개여야 합니다
infix fun Any.to(other:Any, other2:Any) = Pair(this, other)
infix fun Any.to(other:Any) = Pair(this, other)
//잘못된 사용. 컴파일 에러. 인수는 한개여야 합니다
infix fun Any.to(other:Any, other2:Any) = Pair(this, other)
구조 분해 선언
코틀린 표준 라이브러리 클래서 중에는 Pair 클래스가 있습니다.Pair 클래스는 두 쌍의 값을 갖고 있습니다.
1 to "one" 중위 호출은 Pair 클래스를 리턴합니다.
이 Pair 는 (number, name) 에 값을 설정합니다.
val (number, name) = 1 to "one" //number=1, name="one"
구조 분해 선언은 for 문에서 인덱스와 값을 변수에 저장할 수 있습니다.
for((index, value) in list.withIndex()) { //withIndex() 를 이용해서 구조 분해 선언
println("$index, $value")
}
println("$index, $value")
}
댓글
댓글 쓰기