10
10

ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ์ •์˜

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()
}
 

ํ•จ์ˆ˜์— ๊ด€ํ•ด ์–˜๊ธฐํ•˜๋Š” ์ด๋ฒˆ 3์žฅ์—์„œ ๊ณ„์† ์‚ฌ์šฉ๋  ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜๋‹ค. ๊ตฌ๋ถ„์ž๋ฅผ ๋ฐ›์•„์„œ ์•ž๋’ค๋กœ “(“, “)”๋ฅผ ๋ถ™์—ฌ์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.

ํ•˜๋‚˜ ํ•˜๋‚˜ ์‚ดํŽด๋ณด์ž.

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์ธ์ž์— ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ separator = "." ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ธ์ž๋ฅผ ๋„ฃ์–ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ค‘๊ฐ„์—๋งŒ ๋„ฃ์„ ์ˆ˜๋Š” ์—†๊ณ , ๋ช…๋ช…ํ•œ ์ธ์ž ์ดํ›„๋กœ๋Š” ๋ชจ๋‘ ์ด๋ฆ„์„ ๋ถ™์—ฌ ํ˜ธ์ถœํ•ด์•ผ๋œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ž๋ฅผ ํ™•์‹คํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ผ๋™์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ธ์ž์— ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ํ–‰๋™์€ ๋””ํดํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜๋Š”๋ฐ, ํ•จ์ˆ˜ ์„ ์–ธ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ์ง€์ •ํ•ด๋‘๋ฉด ํ•ด๋‹น ์ธ์ž์— ๊ฐ’์ด ๋“ค์–ด์˜ค์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋‘” ๊ฐ’์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ์ž…๋ ฅ๊ฐ’์„ ๋Œ€์‹ ํ•œ๋‹ค. ์ด๊ฒƒ์„ ๋””ํดํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋””ํดํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด๋ฆ„๋ถ™์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ์ธ์ž๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ตœ์ƒ์œ„ ํ•จ์ˆ˜์™€ ์ตœ์ƒ์œ„ ํ”„๋กœํผํ‹ฐ

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ผญ ํด๋ž˜์Šค์•ˆ์˜ ๋ฉ”์„œ๋“œ๋กœ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ƒฅ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ ์œผ๋ฉด ๋˜๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์˜ ํŒจํ‚ค์ง€๋งŒ importํ•ด์ฃผ๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ? ๊ทธ ์ด์œ ๋Š” ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ƒ์œ„ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ํ•  ๋•Œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ JVM์— ๋„˜๊ฒจ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

package ch03.JoinToString

fun <T> joinToString(
       ...
){ ... }
 

์ด๋Ÿฐ์‹์œผ๋กœ ์ •์˜ํ•˜๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋˜ ํŒŒ์ผ๊ณผ ๋Œ€์‘ํ•˜๊ณ , ์ตœ์ƒ์œ„ ํ•จ์ˆ˜๋Š” ์ •์  ํ•จ์ˆ˜๋กœ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ๋ชจ์–‘์€ ํ•จ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœํผํ‹ฐ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ํด๋ž˜์Šค ๋ฒ”์œ„ ๋ฐ–์—์„œ const val๋กœ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š”๊ฒŒ ๊ทธ ์˜ˆ์‹œ๋‹ค. const val์€ ์ž๋ฐ”์˜ public static final๋กœ ์ปดํŒŒ์ผ๋œ๋‹ค. ๋‹จ const ๋Š” primitiveํƒ€์ž…๋“ค๊ณผ, String ํƒ€์ž…๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ™•์žฅํ•จ์ˆ˜์™€ ํ™•์žฅ ํ”„๋กœํผํ‹ฐ

ํ™•์žฅํ•จ์ˆ˜

ํ™•์žฅํ•จ์ˆ˜๋Š” ๊ธฐ์กด API๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ํด๋ž˜์Šค ๋ฐ–์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ฉ”์„œ๋“œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

fun String.lastChar(): Char = this.get(this.length - 1)
 

Stringํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ๋งŒ๋“  lastChar()ํ•จ์ˆ˜๋‹ค. Stringํด๋ž˜์Šค ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์ด๋•Œ ํ™•์žฅํ•  ํด๋ž˜์Šค ์ด๋ฆ„(์—ฌ๊ธฐ์„œ๋Š” String)์„ ์ˆ˜์‹  ๊ฐ์ฒด ํƒ€์ž…(receiver type)์ด๋ผ๊ณ  ํ•˜๊ณ  this.get()์—์„œ ์‚ฌ์šฉ๋˜๋Š” this๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋Œ€์ƒ ๊ฐ’์œผ๋กœ ์ˆ˜์‹  ๊ฐ์ฒด(receiver object)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฆ‰ ์ˆ˜์‹ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ™•์žฅํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜์‹ ๊ฐ์ฒด๋ฅผ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์‹œ์ ์˜ ๋ถ€๊ฐ€๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ this๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๊ฒƒ์ด์ง€ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์—์„œ ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ๋ฐ–์—์„œ ์ •์˜๋œ ํ™•์žฅํ•จ์ˆ˜๋Š” ์บก์Šํ™”๋ฅผ ๊นฐ๊นŒ? ์ •๋‹ต์€ “๊นจ์ง€์•Š๋Š”๋‹ค”์ด๋‹ค. ํ™•์žฅํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์˜ private, protected ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— ์บก์Šํ™”๋ฅผ ์ง€ํ‚ค๊ณ  ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํ™•์žฅํ•จ์ˆ˜๋Š” importํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

import string.lastChar
import string.*
 

์•„๋ž˜ ์œ„ ๋ชจ๋‘ ํ™•์žฅํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” import๊ตฌ๋ฌธ์ด๋‹ค. ํ™•์žฅํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํ•จ์ˆ˜๊ฐ€ ์ด๋ฆ„์ด ๊ฒน์น˜๋ฉด as๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ํ™•์žฅํ•จ์ˆ˜๋ฅผ ๋ณ„๋ช…์ง€์–ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋งˆ๋ƒฅ ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ํ™•์žฅํ•จ์ˆ˜๋„ ๋ชปํ•˜๋Š”๊ฒŒ ์žˆ๋Š”๋ฐ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ setOnClickListener์˜ object๋กœ View์˜ onClick์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜๋Š”๋ฐ, ์ด๋Ÿฌ๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฑด ํด๋ž˜์Šค ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์ด๋ผ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๊ณ , ํ™•์žฅํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค ๋ฐ–์— ์žˆ์–ด์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์—†๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ด ๋ฐ˜ํ•ด ํ™•์žฅํ•จ์ˆ˜๋Š” ์ˆ˜์‹ ๊ฐ์ฒด, ์ˆ˜์‹ ๊ฐ์ฒด ํƒ€์ž…์— ์˜ํ•ด ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

val view: View = Button()
    view.showOff()
 

view๋ณ€์ˆ˜๋Š” Viewํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— View์˜ ํ™•์žฅํ•จ์ˆ˜ showOff๋ฅผ ์‹คํ–‰ํ•˜์ง€ Button์˜ showOff๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. view: Button ์ด์—ˆ๋‹ค๋ฉด Button์˜ showOff๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

ํ™•์žฅ ํ”„๋กœํผํ‹ฐ

ํ™•์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ํ•จ์ˆ˜ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœํผํ‹ฐ ํ˜•ํƒœ๋กœ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ๋ณด๋Š” ๊ฒŒ ํŽธํ•˜๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ์ˆ˜์—†๊ณ  ๋‹จ์ง€ ํ”„๋กœํผํ‹ฐ ๋ฌธ๋ฒ•๋งŒ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ™•์žฅํ•จ์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด get()์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค. ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์—†์–ด backing field๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— get()์œผ๋กœ ๊ฒŒํ„ฐ๋ฅผ ์ •์˜ํ•ด์ค˜์•ผํ•˜๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ set()์„ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ ์กฐ์ž‘๋„ ๊ฐ€๋Šฅํ•˜๊ธดํ•˜๋‹ค. ์•„๋ž˜๊ฐ€ ๊ทธ ์˜ˆ์‹œ๋‹ค.

var StringBuilder.lastChar: Char
    get() = get(length - 1)
    set(value: Char) {
        this.setCharAt(length - 1, value)
    }
 

Collection

์ฝ”ํ‹€๋ฆฐ์˜ ์ปฌ๋ ‰์…˜์€ ์ž๋ฐ” ์ปฌ๋ ‰์…˜์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฑฐ๊ธฐ์— ํ™•์žฅํ•จ์ˆ˜๋กœ ์ฝ”ํ‹€๋ฆฐ์—์„œ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.

varargs

์ด๊ฑด ์ต์ˆ™ํ•œ ํ‘œํ˜„์ด๋‹ค. ๊ฐ€๋ณ€๊ธธ์ด ์ธ์ž์ธ๋ฐ, ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ’์„ ๋„ฃ์–ด ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฐ์—ด์„ ๊ฐ€๋ณ€์ธ์ž๋กœ ๋„˜๊ธธ๋•Œ๋Š” ์ฝ”ํ‹€๋ฆฐ๊ณผ ์ž๋ฐ”๊ฐ€ ๋‹ค๋ฅธ๋ฐ, ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์ „๋‹ฌํ•  ๋ฐฐ์—ด ์•ž์— ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž์ธ *๋ฅผ ๋ถ™์ด๋ฉด ์›์†Œ๋“ค์„ ํŽผ์ณ์„œ ์ธ์ž๋กœ ๋„ฃ์–ด์ค€๋‹ค.

val list = listOf("args: ", *args)
 

์ค‘์œ„ํ˜ธ์ถœ๊ณผ ๊ตฌ์กฐ ๋ถ„ํ•ด

mapOf(a to b)์—์„œ a๋Š” key, b๋Š” value๋กœ ๋งตํ•‘๋˜์–ด ์ €์žฅ๋œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” to๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ(ํ™•์žฅํ•จ์ˆ˜๋‹ค)์ด๊ณ , ์ค‘์œ„ํ˜ธ์ถœ(infix)๋กœ ์‚ฌ์šฉ๋œ ๊ฒƒ์ด๋‹ค. ์ˆ˜์‹ ๊ฐ์ฒด to ์œ ์ผํ•œ ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ๋˜๋Š”๋ฐ toํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜์ด Pair์ž„์„ ์•Œ๋ฉด ๊ตฌ์กฐ๋ถ„ํ•ด๊นŒ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. Pair๋Š” ์ž๋ฐ”์—๋Š” ์—†๋Š” ๊ฐœ๋…์ธ๋ฐ ์ˆœ์„œ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

val (num, name) = 1 to "one"
 

์œผ๋กœํ•˜๋ฉด num์— 1, name์— one์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ์ด๊ฑธ ๊ตฌ์กฐ๋ถ„ํ•ด์„ ์–ธ, destructuring declaration์ด๋ผ๊ณ  ํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๊ตฌ์กฐ๋ถ„ํ•ด์„ ์–ธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. for๋ฌธ์—์„œ ์‚ฌ์šฉํ•œ .withIndex()๊ฐ€ ๊ทธ ์ •์ฒด๋‹ค.

to๊ฐ€ map์—์„œ ์‚ฌ์šฉ๋ผ์„œ map์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ๋˜๋Š” ์ค„ ์•Œ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ˆœ์„œ์Œ์ด ํ•„์š”ํ•˜๋ฉด to๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ž์—ด๊ณผ ์ •๊ทœ์‹

์ •๊ทœ์‹์€ ๊ผญ ํ•œ๋ฒˆ ์ตํžˆ๊ณ  ๋„˜์–ด๊ฐ€์•ผํ–ˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค. ์ž๋ฐ”์˜ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ ์ค‘ split()์˜ ์ธ์ž๋กœ “.”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๋ฐ, ์ด๊ฑด split์˜ ์ธ์ž๊ฐ€ ์ •๊ทœ์‹์ด๊ณ  .์ด ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๊ทœ์‹์œผ๋กœ ํ•ด์„๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
      String test = "12.51.6262.6515.";
      System.out.println(Arrays.toString(test.split(".")));
  }
} 
 

๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์„ String์œผ๋กœ ๋ฐ›๊ณ  .toRegex()๋กœ ์ •๊ทœ์‹์ž„์„ ๋ช…์‹œํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ์ •๊ทœ์‹์„ ํ‘œํ˜„ํ•  ๋•Œ \ ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด \\๋กœ ํ‘œํ˜„ํ•˜๋˜๊ฑธ “”” “"”๋ฅผ ์ด์šฉํ•ด ์ด์Šค์ผ€์ดํ”„ ํ•  ๋…ธ๋™์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์ถ”๊ฐ€๋กœ ์‚ผ์ค‘ ๋”ฐ์˜ดํ‘œ์—๋„ ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ •๊ทœ์‹ ๋ฌธ๋ฒ•์€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๋กœ์ปฌ ํ•จ์ˆ˜

์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜์ธ๋ฐ, ํ•จ์ˆ˜์—์„œ ์ถ”์ถœํ•œ ํ•จ์ˆ˜๋ฅผ ์›ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ค‘์ฒฉ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ƒฅ ํ•จ์ˆ˜ ์•ˆ์— ๋˜ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

fun User.validateBeforeSave() {
    fun validate(value: String, fieldName: String) {
        if (value.isEmpty()) {
            throw IllegalArgumentException(
               "Can't save user $id: empty $fieldName")
        }
    }

    validate(name, "Name")
    validate(address, "Address")
}
 

validate๊ฐ€ ๋กœ์ปฌํ•จ์ˆ˜๋‹ค. ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๋ณด๋ฉด ์ ์–ด๋„ validateBeforeSaveํ•จ์ˆ˜, ์ฆ‰ validateํ•จ์ˆ˜ ๋ฐ”๊นฅ์— ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ํ•จ์ˆ˜ ์ค‘์ฒฉ์€ 1 depth๊นŒ์ง€๋งŒ ํ•˜๋Š”๊ฒŒ ๊ถŒ์žฅ์‚ฌํ•ญ์ด๋‹ค.

 

 

 

 

"๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค"
๋ฐ˜์‘ํ˜•

'๐Ÿ“– > ์ฝ”ํ‹€๋ฆฐ ์ธ ์•ก์…˜๐Ÿ“–' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Kotlin in action(5)  (0) 2023.10.10
Kotlin in action(4)  (0) 2023.10.10
Kotlin in action(3)  (0) 2023.10.10
Kotlin in action(9)  (0) 2023.10.10
Kotlin in action(1)  (0) 2023.10.10
COMMENT