[TIL] Kotlin ํ‘œํ˜„์‹ ํ™œ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ธฐ

2026. 3. 8. 21:38ยทToday I Learned ๐Ÿง/Project

 

 

PR ๋ฆฌ๋ทฐ์—์„œ Kotlin ํ‘œํ˜„์‹ ๊ด€๋ จ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.

`when`, `ifBlank`, `let`์„ ํ™œ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•ด๋ดค๋‹ค. ๐Ÿซต๐Ÿป

 

 

 

`when` ํ‘œํ˜„์‹

 

Java ์—์„œ๋Š” `switch~case`๋ฌธ,  Kotlin์—์„œ๋Š” `when` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

when(๊ฐ’) {
    ์กฐ๊ฑด๋ถ€ -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ
    ์กฐ๊ฑด๋ถ€ -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ
    else -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ
}

 

Java ์—์„œ๋Š” `switch~case`๋ฌธ,  Kotlin์—์„œ๋Š” `when` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    else -> "C"
}

 

`when()` ์— ๊ฐ’ ์—†์ด `ealry return`์ฒ˜๋Ÿผ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

`if-else`๋ฌธ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

 

 

val grade = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    else -> "C"
}

 

`when`์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ‘œํ˜„์‹์ด๋ผ์„œ ๋ณ€์ˆ˜์— ๋ฐ”๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿšง ์ˆ˜์ • ์ „ ์ฝ”๋“œ 1 — `if`๋ฌธ

        if (deleteImage) {
            this.imageId = null
        }
        imageId?.let { this.imageId = it }

 

 

์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ๊ธฐ๋ณธ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, `deleteImage`๋ผ๋Š” flag ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ •์„ ํ–ˆ๋‹ค.

`deleteImage = true`์ด๋ฉด์„œ `imageId`๊ฐ€ null์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋จผ์ € ๊ธฐ์กด ๊ฐ’์„ ์‚ญ์ œํ•œ ํ›„์— (null ์ฒ˜๋ฆฌ) ๋ฐ”๋กœ ์ƒˆ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ด๋‹ค.

๊ธฐ๋Šฅ์ƒ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์—ˆ๋‹ค.

 

 

๐Ÿ‘ท๐Ÿป ์ˆ˜์ • ํ›„ ์ฝ”๋“œ 1 — `when` ํ‘œํ˜„์‹

    when {
        imageId != null -> this.imageId = imageId
        deleteImage -> this.imageId = null
    }

 

์ˆ˜์ • ์ „ ์ฝ”๋“œ์—์„œ๋Š” ๋ฌด์กฐ๊ฑด ์‚ญ์ œ(null ์ฒ˜๋ฆฌ) ์ฒ˜๋ฆฌ ํ›„์— ์ƒˆ ๊ฐ’์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ,

์ˆ˜์ • ํ›„์—๋Š” ์ƒˆ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฎ์–ด์“ฐ๊ธฐ ํ•˜๊ณ (์‚ญ์ œ ์ฒ˜๋ฆฌ ํ•„์š” ์—†์Œ)

์ƒˆ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์‚ญ์ œ ์ฒ˜๋ฆฌ๋งŒ ํ•˜๋Š” ์š”์ฒญ๋œ ๊ฒฝ์šฐ์—๋งŒ null์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

 

 

 

 

๐Ÿšง ์ˆ˜์ • ์ „ ์ฝ”๋“œ 2  —  `if-else`๋ฌธ

        content?.let {
            if (it.isNotBlank()) {
                this.content = it
            } else {
                this.content = null
            }
        }

 

์ˆ˜์ • ๊ด€๋ จ api๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

1) content key ๊ฐ’ ์ž์ฒด๊ฐ€ ๋„˜์–ด์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ (null) -> ๋‚ด์šฉ ์ˆ˜์ • ์—†์Œ

2) content ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด("")์ธ ๊ฒฝ์šฐ -> ๋‚ด์šฉ ์‚ญ์ œ

3) content ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด("")์ด ์•„๋‹Œ ๊ฒฝ์šฐ -> ์ƒˆ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ

 

 

์œ„ ์ฝ”๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์—ˆ๋‹ค.

 

 

๐Ÿ‘ท๐Ÿป ์ˆ˜์ • ํ›„ ์ฝ”๋“œ 2 — `ifBlank` ํ‘œํ˜„์‹

content?.let { this.content = it.ifBlank { null } }

 

`ifBlank { null }`์€ ๋ฌธ์ž์—ด์ด blank์ด๋ฉด `null`์„, ์•„๋‹ˆ๋ฉด ์›๋ž˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ‘œํ˜„์‹์ด๋‹ค.

 

 

 

`let`์€ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

`let`์€ ์Šค์ฝ”ํ”„ ํ•จ์ˆ˜๋‹ค.  ๋ธ”๋ก `{ }` ์•ˆ์˜ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

 

val result = "hello".let {
    println(it)       // ์‹คํ–‰๋งŒ ํ•˜๊ณ 
    it.uppercase()    // โฌ…๏ธ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹ = ๋ฐ˜ํ™˜๊ฐ’
}

// result = "HELLO"

 

 

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ™œ์šฉ์„ ํ–ˆ๋‹ค.

        val activityCategoryList =
            activityCategoryIdList?.let {
                val activityCategoryList = activityCategoryRepository.findAllById(it)
                if (it.size != activityCategoryList.size) {
                    throw ActivityCategoryNotFoundException()
                }

                activityCategoryList โฌ…๏ธ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋จ
            }

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Today I Learned ๐Ÿง > Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] JPA @OneToMany ์ปฌ๋ ‰์…˜ ์ˆ˜์ • ์‹œ ์ฃผ์˜์  (์ปฌ๋ ‰์…˜ ์ถ”์ )  (0) 2026.03.09
[TIL] JPA ์—”ํ‹ฐํ‹ฐ update ๋ฌธ์ œ ํ•ด๊ฒฐ (JPA ๋”ํ‹ฐ์ฒดํ‚น๊ณผ @Transactional)  (3) 2026.01.18
'Today I Learned ๐Ÿง/Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL] JPA @OneToMany ์ปฌ๋ ‰์…˜ ์ˆ˜์ • ์‹œ ์ฃผ์˜์  (์ปฌ๋ ‰์…˜ ์ถ”์ )
  • [TIL] JPA ์—”ํ‹ฐํ‹ฐ update ๋ฌธ์ œ ํ•ด๊ฒฐ (JPA ๋”ํ‹ฐ์ฒดํ‚น๊ณผ @Transactional)
ํ•ด๋‹ˆ ๐ŸŒณ
ํ•ด๋‹ˆ ๐ŸŒณ
๐ŸŒฑ + โ˜€๏ธ = ๐ŸŒณ
  • ํ•ด๋‹ˆ ๐ŸŒณ
    haeni.dev
    ํ•ด๋‹ˆ ๐ŸŒณ
  • ๋งํฌ

    • github
    • velog
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (15)
      • Dev Log โœ๏ธ (6)
        • Tech (2)
        • ์šฐ์‚ฌ๊ธฐ ๊ฐœ๋ฐœ์ผ์ง€ ๐Ÿฐ (4)
      • Today I Learned ๐Ÿง (9)
        • Project (3)
        • Algorithm (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    postgresql
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    IT
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    springboot
    ci/cd
    kotlin
    Java
    ๊ฐœ๋ฐœ์ผ์ง€
    til
    JPA
    AWS
    test
    backend
    ์ฝ”ํ…Œ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
ํ•ด๋‹ˆ ๐ŸŒณ
[TIL] Kotlin ํ‘œํ˜„์‹ ํ™œ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”