007. Collections

코틀린의 Collections

C++에 STL이 있다면 Java에는 Collections가 있다.

Java와 완벽 호환된다는 코틀린은 Collections를 어떻게 지원하는 지 알아보자.

아래와 같은 간단한 코드로 HashSet 객체를 만들 수 있다.

1
val set = hashSetOf(1, 7, 53)

비슷한 방법으로 ListMap도 만들 수 있다.

1
2
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")

참고 위의 코드에서 to는 일반 함수이다.

코틀린의 Collections를 통해 생성되는 객체의 클래스는 아래와 같은 방법으로 추측할 수 있다.

1
2
3
4
5
6
>>> println(set.javaClass)
class java.util.HashSet
>>> println(list.javaClass)
class java.util.ArrayList
>>> println(map.javaClass)
class java.util.HashMap

참고 위의 코드에서 javaClass는 Java의 getClass()메소드에 해당한다.

위의 출력에서 알 수 있듯, 코틀린은 표준 Java Collections를 사용하고 있음을 알 수 있다.

반대로 설명하면 코틀린은 독자적인 Collections를 가지고 있지 않다는 것이며, Java로 작성된 코드와의 상호 작용이 좀 더 수월해짐을 뜻한다.

다만, 코틀린에서 Collections를 사용하게 되면 Java에서 제공하는 기능보다 더욱 많은 기능을 사용할 수 있다.

예를 들어, 숫자들 중 최대값을 찾거나, 리스트의 마지막 요소를 가져온다거나 하는 것으로 아래 코드를 통해 확인할 수 있다.

1
2
3
4
5
6
>>> val strings = listOf("first", "second", "fourteenth")
>>> println(strings.last())
fourteenth
>>> val numbers = setOf(1, 14, 2)
>>> println(numbers.max())
14