3장에서는 모든 프로그램에 핵심이라고 할 수 있는 함수 정의와 호출 기능을 코틀린이 어떻게 개선했는지 살펴본다.

__3.1 코틀린에서 컬렉션 만들기

코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 코틀린이 자체 컬렉션을 제공하지 않는 이유는 뭘까 ? 표준 자바 컬렉션을 활용하면 자바 코드와 상호 작용하기가 훨씬 더 쉽다.

listOf("세진님","재봉님","준호님","태현님","성현님","규석님","도윤님","성호님","성범님")
val linkedList = LinkedList<Int>()

// 맨 앞에 삽입 [3]
linkedList.addFirst(3)
// index 1에 값 4 삽입 [3, 4]
linkedList.add(1, 4)
// 마지막에 삽입 [3, 4, 5]
linkedList.addLast(5)

__3.2 함수를 호출하기 쉽게 만들기

fun<T> joinToString(
collection: Collection<T>,
separator: String,
prefix: String,
postfix: String) : String {

	val result = StringBuilder(prefix)

	for((index,element) in collection.withIndex()) {
		if(index > 0) result.append(separator)
		result.append(element)

	}

	result.append(postfix)
	return.result.toString

}

함수를 호출할 때마다 모든 인자의 원소를 넣어줘야한다.

joinToString(list,";", "(", ")")

____3.2.1 이름 붙인 인자

첫번째 문제는 가독성이다. 코틀린은 함수를 호출할 때 이름을 붙여줄 수 있다. 인자에 이름을 하나라도 명시하면 그 뒤에 오는 인자는 이름을 꼭 명시해야한다.

joinToString(list,separator= ";",prefix = " ", postfix = ".")

____3.2.2 디폴트 파라미터 값

파라미터로 인자를 보내지 않더라도 기본 값을 지정해줄 수 있다. 이렇게 하면, 기본 생성자를 오버로딩 하지 않아도, 해당 위치에 있는 인자를 생략하면 자동으로 디폴트 파라미터로 들어가게 된다.

fun<T> joinToString(
collection: Collection<T>,
separator: String = ", ",
prefix: String = "",
postfix: String = ".") : String 

____3.2.3 정적인 유틸리티 클래스 없애기: 최상위 함수와 프로퍼티

자바에서는 모든 메서드를 클래스 내부에서 선언해야했지만, 코틀린은 클래스를 생략하고,