๐Ÿ”ฎKOTLIN

์ฝ”ํ‹€๋ฆฐ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์–ธ์–ด์ด๋ฉฐ, ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ทธ ์ค‘ ์ผ๋ถ€๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ™•์žฅ ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜์ง€๋งŒ, ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fun String.addExclamation(): String {
    return "$this!"
}

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” String ํด๋ž˜์Šค์— addExclamation()์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

val greeting = "Hello"
println(greeting.addExclamation()) // ์ถœ๋ ฅ: Hello!

2. Null ์•ˆ์ •์„ฑ

์ฝ”ํ‹€๋ฆฐ์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— null ์•ˆ์ „์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” NullPointerException์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

var name: String? = null

์œ„์˜ ์ฝ”๋“œ์—์„œ ๋ณ€์ˆ˜ name์€ null์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” null ์ฒดํฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

val message = "My name is ${name ?: "Unknown"}"

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ null ์ฒดํฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ name์ด null์ด๋ฉด "Unknown"์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

3. ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค

์ฝ”ํ‹€๋ฆฐ์€ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋Š” ์ž๋™์œผ๋กœ toString(), equals(), hashCode() ๋“ฑ์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

data class Person(val name: String, val age: Int)

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” Person ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” name๊ณผ age๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ž๋™์œผ๋กœ toString(), equals(), hashCode() ๋“ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

val person1 = Person("Alice", 25)
val person2 = Person("Bob", 30)

println(person1) // ์ถœ๋ ฅ: Person(name=Alice, age=25)
println(person1 == person2) // ์ถœ๋ ฅ: false

4. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ฝ”ํ‹€๋ฆฐ์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋žŒ๋‹ค์‹, ๊ณ ์ฐจ ํ•จ์ˆ˜ ๋“ฑ์„ ์ง€์›ํ•˜์—ฌ ์ฝ”๋“œ๋Ÿ‰์„ ์ค„์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

val numbers = listOf(1, 2, 3, 4, 5)

val evenNumbers = numbers.filter { it % 2 == 0 }

println(evenNumbers) // ์ถœ๋ ฅ: [2, 4]

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€์˜ ์ง์ˆ˜๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋žŒ๋‹ค์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

5. ์ฝ”๋ฃจํ‹ด

์ฝ”๋ฃจํ‹ด์€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ์ฝ”๋ฃจํ‹ด์€ suspend ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

suspend fun fetchUserData(userId: String): User {
    // ...
}

val user = runBlocking {
    val userId = "123"
    fetchUserData(userId)
}

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” runBlocking ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋ฃจํ‹ด์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด fetchUserData ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ user ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด์™ธ์—๋„ ๋งŽ์€ ์žฌ๋ฏธ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ฝ”ํ‹€๋ฆฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์„ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ๋” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

Last updated