본문 바로가기
읽은책

코틀린 인 액션 스터디 - 3

by e-pd 2022. 12. 3.

컬렉션

  • 코틀린은 자체 컬렉션을 제공안함. 표준 자바 컬렉션을 활용하면 자바 코드와 상호작용하기가 더 쉬움.
val foo = listOf("a", "b", "c")
val last = foo.last()
// c

val numbers = setOf(1,2,3)
val maxNumber = numbers.max()
// 3

함수 호출하기 쉽게 개선하기

fun <T> joinToString(
    collection: Collection<T>,
    seperator: String,
    prefix: String,
    postfix: String
) : String {
    val result = StringBuilder(prefix)
    for ((index, element) in collection.withIndex()) {
        if (index > 0) result.append(seperator)
        result.append(element)
    }
    result.append(postfix)
    return result.toString()
}

fun main() {
    val list = listOf(10,20,30)
    println(joinToString(list, " ", "/", "/"))
    // /10 20 30/
}

리펙터링

  • 코틀린에서 가독성을 위해 이름을 붙인 인자를 넣어줄 수 있다.
fun main() { val list = listOf(10,20,30) println(joinToString(list, separator = " ", prefix = "/", postfix = "/")) }
  • 코틀린에서 디폴트 파라미터를 사용하면 Java에서 읽을때는 디폴트 파라미터 개념이 없어 오버라이딩 함수로 번역된다.

확장함수로 리펙토링

fun <T> Collection<T>.joinToString(
    collection: Collection<T>,
    seperator: String = ", ",
    prefix: String = "",
    postfix: String = ""
) : String {
    val result = StringBuilder(prefix)
    // this는 수신객체를 가리킴.
    for ((index, element) in this.withIndex()) {
        if (index > 0) result.append(seperator)
        result.append(element)
    }
    result.append(postfix)
    return result.toString()
}

확장함수

  • 확장함수는 오버라이드 할 수 없다. 수신 객체로 지정한 변수의 정적 타입에 의해 어떤 확장 함수가 호출될지 결정됨.
  • 확장 함수와 클래스의 멤버 함수와 이름 시그니쳐가 같으면 맴버함수가 우선 호출 된다.

가변인자

  • varargs를 사용한다.
fun foo(vararg bar: String) {
    println(bar.joinToString(","))
}

fun main() {
    val strings = arrayOf("b", "c", "d")
    foo(*strings)
}

to 함수

  • 중위 호출로 호출. Pair 인스턴스를 반환

정규식

  • split(".")를 하면 모든 문자를 나타내는 정규식으로 해석
  • 구분 값으로 사용하기 위해서는 이스케이프로 정규식임을 나타내야한다.
fun main() {
  println("1.2.3".split("\\.|-".toRegex()))
}

3중 따옴표

  • 이스케이프처리나 텍스트가 길어질때 유용하다

로컬함수

  • 로컬 함수를 이용하여 내부 검증 로직을 사용하거나 확장함수로 클래스를 간결하게 유지하게 만들 수 있다.
  • 중첩된 함수 깊이가 깊어지면 코드 읽기가 어려워지기 떄문에 한 단계만 권장한다.

'읽은책' 카테고리의 다른 글

Real MySQL  (0) 2023.03.06
개발자로 살아남기  (0) 2022.12.03
구글 엔지니어는 이렇게 일한다  (0) 2022.11.29
코틀린 인 액션 스터디 - 2  (0) 2022.11.26
코틀린인액션 스터디- 1  (0) 2022.11.26