[코틀린 인 액션] 3. 함수 정의와 호출

HyoJin Lee·2022년 5월 15일

코틀린 인 액션

목록 보기
4/4

코틀린에서 컬렉션 만들기

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" 중위호출 - 메소드나인자가 하나인대상에게
  • 구조분해 선언

이하생략

profile
스터디 기록용 velog

0개의 댓글