Android/Kotlin

[코틀린 인 액션] 3장 정리

Chef.Yeon 2022. 11. 28. 15:21
728x90
3.4.2 가변 인자 함수

   1. 인자의 개수가 정해지지 않은 인자(vararg)로 메서드 호출 시 원하는 개수만큼 값을 인자로 넘겨 사용 가능

fun main(args: Array<String>) {
    val ls = arrayOf(1,2,3)
    val ls2 = arrayOf(*ls,4,5,6)
    printNumbers(*ls2.toIntArray())
}

fun printNumbers(vararg numbers: Int) {
    for (n in numbers) {
        println(n)
    }
}

   

   2. 스프레드 연산자(*)를 통해 배열을 풀어 각 원소가 인자로 전달되도록 함

fun main(args: Array<String>) {
    val ls = intArrayOf(1,2,3)
    printNumbers(*ls)
}

fun printNumbers(vararg numbers: Int) {
    for (n in numbers) {
        println(n)
    }
}

 

3.5.3 여러 줄 3중 따옴표 문자열

   1. 3중 따옴표를 사용하면 줄 바꿈이 있는 텍스트를 쉽게 문자열로 생성 가능

fun main(args: Array<String>) {
    val logo = """| //
                 .| //
                 .| / \
    """
    print(logo)
}

   

   2. 문자열을 알아보기 쉽게 작성하기 위해 특별한 문자열로 표시,
       trimMargin 메서드를 이용해 구분 문자열의 직전 공백을 제거 가능

fun main(args: Array<String>) {
    val logo = """| //
                 .| //
                 .| / \
    """.trimMargin(".") // 마침표 직전까지의 공백을 제거
    print(logo)
}

   

   3. 3중 따옴표 문자열 안에서는 이스케이프 사용이 불가능

      - 3중 따옴표 문자열 안에 $를 넣어야 한다면 문자열 템플릿 안에 작성해야 함

fun main(args: Array<String>) {
    val price = """${'$'}99.9"""
    print(price)
}

 

3.6 코드 다듬기: 로컬 함수와 확장
  • 코드 중복 예제: 필드 검증에 대한 중복
// User.kt
import java.lang.IllegalArgumentException

class User (val id: Int, val name: String, val address: String)

fun saveUser(user: User) {
    if (user.name.isEmpty()) {
        throw IllegalArgumentException("Can't Save user id: ${user.id}")
    }

    if (user.address.isEmpty()) {
        throw IllegalArgumentException("Can't Save user id: ${user.id}")
    }
    // user 저장
}

 

  • 로컬 함수를 사용한 중복 제거
// User.kt
import java.lang.IllegalArgumentException

class User (val id: Int, val name: String, val address: String)

fun saveUser(user: User) {
    fun validate(value: String, fieldName: String) {
        if (value.isEmpty()) {
            throw IllegalArgumentException("Can't Save user id: ${user.id}")
        }
    }
    validate(user.name, "Name")
    validate(user.address, "Address")
    // user 저장
}
// Main.kt
fun main(args: Array<String>) {
    saveUser(User(123,"",""))
}
728x90