val set = hashSetOf(1, 7, 53)
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")
각 객체들은 코틀린 컬렉션이 아닌, 자바 컬렉션을 사용한다. 하지만 기능이 조금 더 존재한다.
val strings = listOf("first", "second", "three")
println(strings.last()) // three
fun<T> joinToString (
collection: Collection<T>,
separator: String = ", ",
prefix: String = "",
postfix: String = ""
) : String
//기본
joinToString(collection, " ", " ", " ")
//가독성을 위한 작성
joinToString(collection, separator = " ", prefix = " ", postfix = "."
//오버로딩을 이용한 생략
joinToString(list)
//일부만 작성
joinToString(list, "; ")
//순서와 상관없이 오버로딩
joinToString(list, postfix = ";", prefix = "#")
//자바에서는 디폴트패러미터 개념이 없어서, 자바호출을 위해 모든 오버로딩 메소드를 생성한다.
@jvmOverloads
fun joinString(
...
)
package strings
fun joinToString(...) : String{ ...}
함수를 클래스 선언없이 메소드를 임포트하여 사용할 수 있다. 코틀린 소스파일의 이름으로 자동으로 클래스를 컴파일해주기 때문이다.
클래스의 명을 바꾸고싶다면 아래처럼 @jvmName어노테이션을 추가해주자
@file:JvnName("StringFunction)
package strings
fun joinToString ...
최상위 프로퍼티 또한 정적 필드에 저장된다.
const변경자를 추가하면 상수처럼 사용할 수 있다.
//코틀린
const val v = "\n"
//자바
public static final String v = "\n"
확장함수
fun String.lastChar() : Char = this.get(this.length-1)
확장함수를 임포트 해서 사용할 수 있다.
fun <T> Collection<T>.joinToString( //확장함수
separator: String = ", ",
prefix: String = "",
postfix: String = ""
): String {
val result = StringBuilder(prefix)
for ((index, element) in this.withIndex()) {
if (index > 0) result.append(separator)
result.append(element)
}
result.append(postfix)
return result.toString()
}
>>> val list = listOf(1, 2, 3)
>>> println(list.joinToString(separator = "; ",
... prefix = "(", postfix = ")"))
(1; 2; 3)
중위호출과 구조분해 선언
1.to("one") 일반적 선언, 1 to "one" 중위호출 - 메소드나인자가 하나인대상에게이하생략