Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Android
  • 다이나믹 프로그래밍
  • 코틀린
  • Docker
  • kotlin
  • 레포지토리
  • 프리코스
  • webflux
  • 백준
  • 문자열
  • enum
  • elasticsearch
  • 파이썬
  • til
  • ec2
  • grafana
  • MariaDB
  • 코딩테스트
  • kibana
  • 프로그래머스
  • Wil
  • SQL
  • spring
  • 내림차순
  • 코틀린 인 액션
  • 우아한테크코스
  • rsocket
  • 안드로이드
  • java
  • 에라토스테네스의 체

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

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

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

'Android > Kotlin' 카테고리의 다른 글

[코틀린 인 액션] 5장 정리  (0) 2022.11.30
[코틀린 인 액션] 4장 정리  (0) 2022.11.29
[코틀린 인 액션] 2장 정리  (0) 2022.11.24
[Kotlin] enum, sealed class  (0) 2022.09.27
[Kotlin] 고차 함수, 람다, Scope functions  (0) 2022.09.18
    'Android/Kotlin' 카테고리의 다른 글
    • [코틀린 인 액션] 5장 정리
    • [코틀린 인 액션] 4장 정리
    • [코틀린 인 액션] 2장 정리
    • [Kotlin] enum, sealed class
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바