
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 |