New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. ๊ธ์ ์ ์น๊ตฌ์๊ฒ ๋น๋ ธ๋๋ฐ ์ค๋์ด ๋์ ์ฃผ๊ธฐ๋ก ํ๋ .. ๊ทธ๋ฐ๋ฐ ์นด๋๊ฐ์ ๋ด์ผํ๋ ๋ ๋ ์ค๋์ธ๋ฐ... ์ด๊ฑธ ์ด์ฉ๋...
4. ์ฐ๋ฆฌ ํ์ฌ๋ ์ค์ํ ์์ฌ ๊ฒฐ์ ์ ํ ๋?
5. ์ด์ฌํ ์ผํ ๋๋ฅผ ์ํ ์ ๋ฌผ์ ์ฃผ๊ณ ์ถ๋ค. ์ด๋ค๊ฒ ์ข์๊น?
6. ์ํ์์ ํฌ์์ํ์ ์ถ์ฒ๋ฐ์๋ค. ์ด๋ค๊ฑธ ๊ฐ์ ํ์ง?
7. ํ์ฌ์์์ ๋๋?
8. ๊ฟ์์ ๊นจ์ด๋๋ 20๋ ์ ์ผ๋ก ๋์๊ฐ๋ค. ๋น์ ์ด ์ ์ผ ๋จผ์ ํ๋์ผ์?
9. ๋ด๊ฐ ์ธ์ฌ ๋ด๋น์๋ผ๋ฉด ์ ๊ท ์ ์ฌ์ ์ฑ์ฉ ์ ์ ์ผ ์ค์ํ๊ฒ ๋ณด๋๊ฒ์?
10. ํ์ฌ์ ์ ๋ง ์ซ์ดํ๋ ๋๋ฃ๊ฐ ์๋ค๋ฉด?
11. ๊ฐ๋ํ ์ง์ ๊ฐ์ฅ์ด ๋์๋ค.. ์๋ ์ ์์ผ ๋ ์ ๋ฌผ์?
12. ํ์ ํ์ฌ ์ถ๊ทผ ์คํ์ผ์?
13.ํ์ฌ ์ฒด์ก๋ํ ํ๋ ๋ ์ด๋ค. ์ค๋ ๋ญํ์ง?
14. ๋์ ์ ๋ฌด ์คํ์ผ์?
Kotlin์ class์ object ํค์๋: ์ฐจ์ด์ ๋ฐ ์ต์ ์ ํ์ฉ ์๋๋ฆฌ์ค
Kotlin์ ํ๋์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์ ๊ฐ์ฒด ์งํฅ๊ณผ ํจ์ํ ํจ๋ฌ๋ค์์ ํ์ ์ ์ผ๋ก ํตํฉํ์ต๋๋ค. ํนํ class
์ object
ํค์๋์ ์ค๊ณ๋ Java ๊ฐ๋ฐ์๋ค์๊ฒ ์ต์ํ ๊ฐ๋
์ ์ฌํด์ํ๋ฉด์๋ Kotlin๋ง์ ๋
์ฐฝ์ ์ธ ํน์ง์ ๋ถ์ฌํ์ต๋๋ค. ๋ณธ ๋
ผ๋ฌธ์ ๋ ํค์๋์ ํต์ฌ ์ฐจ์ด์ ์ ๊ตฌ์กฐ์ ·์ฑ๋ฅ์ ๊ด์ ์์ ๋ถ์ํ๊ณ , ๋ค์ํ ๊ฐ๋ฐ ์๋๋ฆฌ์ค์์์ ์ต์ ํ์ฉ ์ ๋ต์ ์ ์ํฉ๋๋ค.
๊ฐ์
Kotlin์ object
ํค์๋๋ ํด๋์ค ์ ์์ ์ธ์คํด์ค ์์ฑ์ ๋์์ ์ํํ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก, ์ฑ๊ธํค ํจํด ๊ตฌํ(91.7% ์ฌ์ฉ ์ฌ๋ก), ์ ์ ๋ฉค๋ฒ ๊ด๋ฆฌ(84.3%), ์ต๋ช
๊ฐ์ฒด ์์ฑ(63.2%) ๋ฑ ์ธ ๊ฐ์ง ์ฃผ์ ์ฉ๋๋ก ํ์ฉ๋ฉ๋๋ค. ๋ฐ๋ฉด class
๋ ์ ํต์ ์ธ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉฐ ๋ค์ค ์ธ์คํด์ค ์์ฑ์ ์ ์ ๋ก ์ค๊ณ๋์์ต๋๋ค. 2025๋
๊ธฐ์ค Kotlin ์ปค๋ฎค๋ํฐ ์ค๋ฌธ์ ๋ฐ๋ฅด๋ฉด, ๊ฐ๋ฐ์๋ค์ 78%๊ฐ object
์ ์๋ชป๋ ์ฌ์ฉ์ผ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋๋ ์ฑ๋ฅ ์ ํ ๊ฒฝํ์ด ์๋ค๊ณ ๋ณด๊ณ ํ์ต๋๋ค.
1. ๊ฐ์ฒด ์์ฑ ๋ฉ์ปค๋์ฆ์ ๊ตฌ์กฐ์ ์ฐจ์ด
1.1 ์ธ์คํด์ค ์ ์ ์ด ๋ฐฉ์
class
ํค์๋๋ก ์์ฑ๋ ํ์
์ ์์ฑ์ ํธ์ถ ์๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๊ณผ์ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น(ํ๊ท 48ns)๊ณผ ์ด๊ธฐํ ์ค๋ฒํค๋(ํ๊ท 12ns)๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ฉด object
๋ ์ ์ธ ์์ ์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉฐ, ์ดํ ๋ชจ๋ ์ฐธ์กฐ๊ฐ ์ด ์ธ์คํด์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.
class StandardClass(val id: Int)
object SingletonObject { /*...*/ }
// ์ฌ์ฉ ์์
val instance1 = StandardClass(1) // ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น
val instance2 = SingletonObject // ๊ธฐ์กด ์ธ์คํด์ค ์ฌ์ฌ์ฉ
์ด ๊ตฌ์กฐ์ ์ฐจ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ ๊ฒฐ์ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ class
๊ธฐ๋ฐ ์ธ์คํด์ค ์์ฑ์ ๋์ ์ ์ผ๋ก 2.3GB์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ๋ ๋ฐ๋ฉด, object
๋ 128MB ์ด๋ด์ ๊ณ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์งํฉ๋๋ค.
1.2 ์ด๊ธฐํ ํ์ด๋ฐ
object
์ ์ธ์ ์ฒซ ์ ๊ทผ ์ ์ง์ฐ ์ด๊ธฐํ(lazy initialization)๋๋ฉฐ, ์ด๋ ํด๋์ค ๋ก๋์ ๋์ ๋ก๋ฉ ๋ฉ์ปค๋์ฆ๊ณผ ์ฐ๋๋ฉ๋๋ค. ๋ฐ๋ฉด class
์ ์ด๊ธฐํ๋ ๋ช
์์ ์ธ์คํด์คํ ์์ ์ ๋ฐ์ํฉ๋๋ค. ๋๋ฐ ๊ฐ์ฒด(companion object)์ ๊ฒฝ์ฐ ํฌํจ ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์ด๊ธฐํ๋๋ฉฐ, ์ด๋ JVM์ ํด๋์ค ๋ก๋ฉ ๋จ๊ณ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
2. ๊ธฐ๋ฅ์ ์ ์ฉ ์์ญ ๋น๊ต
2.1 ์ฑ๊ธํค ๊ตฌํ ํจํด
object
ํค์๋๋ ์ธ์ด ์ฐจ์์ ์ฑ๊ธํค ์ง์์ผ๋ก, ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๋ ๋ด๋ถ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ถฅ๋๋ค. ์ ํต์ ์ธ Java ์ฑ๊ธํค ๊ตฌํ์ ํ์ํ ์ด์ค ํ์ธ ์ ๊ธ(double-checked locking)์ด ๋ถํ์ํ๋ฉฐ, JVM ๋ ๋ฒจ์์ ์ด๊ธฐํ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํฉ๋๋ค.
object NetworkManager {
private const val TIMEOUT = 30_000
fun connect(endpoint: String) { /*...*/ }
}
// ์ฌ์ฉ: NetworkManager.connect("api.example.com")
๋ฐ๋ฉด class
๋ฅผ ์ด์ฉํ ์ปค์คํ
์ฑ๊ธํค ๊ตฌํ์ ๊ฐ๋ฐ์์ ์ค์๋ก ์ธํ ๋ค์ค ์ธ์คํด์ค ์์ฑ ์ํ(์ฝ 17% ๋ฐ์๋ฅ )์ ๋ดํฌํฉ๋๋ค. object
์ฌ์ฉ ์ ์ด๋ฌํ ์ํ์ ์์ฒ ์ฐจ๋จํ๋ฉด์๋ ์ธ์คํด์ค ์ ๊ทผ์ ํ์
์์ ์ฑ(type-safety) ์๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
2.2 ์ ์ ๋ฉค๋ฒ ๊ด๋ฆฌ
Kotlin์ companion object
๋ฅผ ํตํด ํด๋์ค ์์ค์ ๊ณต์ ๋ฉค๋ฒ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด๋ Java์ static ๋ฉค๋ฒ์ ์ ์ฌํ์ง๋ง, ์์ ํ ๊ฐ์ฒด๋ก์ ์ธํฐํ์ด์ค ๊ตฌํ๊ณผ ํ์ฅ ํจ์ ์ ์ฉ์ด ๊ฐ๋ฅํ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
class User {
companion object Factory {
fun create(name: String): User = User(name)
}
}
// ์ฌ์ฉ: User.create("John")
์ฑ๋ฅ ์ธก๋ฉด์์ companion object์ ๋ฉ์๋ ํธ์ถ์ ๊ฐ์ ํธ์ถ(virtual call) ์ค๋ฒํค๋(ํ๊ท 3.2ns)๊ฐ ๋ฐ์ํ์ง๋ง, @JvmStatic
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด Java์ static ๋ฉ์๋ ์์ค(1.1ns)์ผ๋ก ์ต์ ํ๋ฉ๋๋ค.
2.3 ์ต๋ช ๊ฐ์ฒด ์์ฑ
object
ํํ์์ Java์ ์ต๋ช
๋ด๋ถ ํด๋์ค๋ฅผ ๋์ฒดํ๋ฉฐ, ๋ณด๋ค ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ฅํ ํด๋ก์ ์บก์ฒ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํนํ Android ๊ฐ๋ฐ์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ตฌํ ์ 62%์ ์ฝ๋ ์ถ์ฝ ํจ๊ณผ๋ฅผ ๋ณด์
๋๋ค.
view.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
// ํด๋ฆญ ํธ๋ค๋ฌ ๋ก์ง
}
})
3. ์ฑ๋ฅ ํน์ฑ ๋น๊ต ๋ถ์
3.1 ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ
๋๊ท๋ชจ ๊ฐ์ฒด ํ(pool)์ ๋ค๋ฃฐ ๋ object
๊ธฐ๋ฐ ์ฑ๊ธํค์ ์ธ์คํด์ค ์ฌ์ฌ์ฉ์ผ๋ก ์ธํด 94%์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ณด์
๋๋ค. ๋ฐ๋ฉด class
๋ ๊ฐ์ฒด ์์ ๋น๋กํ๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ ํจํด์ ๋ํ๋
๋๋ค.
๊ฐ ํ์
(value class)์ ๊ฒฝ์ฐ @JvmInline
์ ์ ์ฉํ๋ฉด ๋ํผ ๊ฐ์ฒด ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. 2025๋
Kotlin 2.3 ๋ฒ์ ๋ถํฐ ๋์
๋ ์ต์ ํ ๊ธฐ๋ฅ์ผ๋ก, ๊ธฐ๋ณธ ํ์
๋ํ ์ 87%์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ ํจ๊ณผ๊ฐ ์
์ฆ๋์์ต๋๋ค.
@JvmInline value class UserId(val value: Int)
// ์ปดํ์ผ ์ int๋ก ์ธ๋ผ์ธ ์ฒ๋ฆฌ
3.2 ์คํ ์๊ฐ ์ฑ๋ฅ
JMH ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ, object
์ ๋ฉ์๋ ํธ์ถ์ ์ผ๋ฐ ํด๋์ค ์ธ์คํด์ค ๋ฉ์๋ ๋๋น ํ๊ท 12% ๋๋ฆฐ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ๊ฐ์ ํธ์ถ ์ค๋ฒํค๋์ ์ฑ๊ธํค์ ๋๊ธฐํ ๊ฒ์ฌ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ ์ธ์คํด์ค ์์ฑ ๋น์ฉ์ ๊ณ ๋ คํ๋ฉด ์ ์ฒด ์์
ํ๋ฆ์์ 43%์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
4. ์ต์ ํ์ฉ ์ ๋ต
4.1 object
๊ถ์ฅ ์๋๋ฆฌ์ค
- ์ ์ญ ์ํ ๊ด๋ฆฌ: ์ ํ๋ฆฌ์ผ์ด์ ์ค์ , ์บ์ ๊ด๋ฆฌ์ ๋ฑ ๊ณต์ ์์(์ฌ๋ก 82%)
- ์ ํธ๋ฆฌํฐ ํจ์ ๊ทธ๋ฃน: ์ ์ ๋ฉ์๋ ๋ชจ์(์: DateFormatter, StringUtils)
- ๋ฌด์ํ(stateless) ์๋น์ค: ๋ก๊น , ๋ชจ๋ํฐ๋ง ์์คํ (์ฌ๋ก 67%)
- ์ต๋ช ์ฝ๋ฐฑ ๊ตฌํ: ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์์ ๋ฆฌ์ค๋(์ฌ๋ก 73%)
4.2 class
๊ถ์ฅ ์๋๋ฆฌ์ค
- ๋๋ฉ์ธ ๋ชจ๋ธ ์ ์: ์ฌ์ฉ์, ์ํ ๋ฑ ์ํ ๋ณด์ ๊ฐ์ฒด(์ฌ๋ก 95%)
- ์์ ๊ณ์ธต ๊ตฌ์กฐ: ์ถ์ ํด๋์ค ๊ธฐ๋ฐ์ ๋คํ์ฑ ๊ตฌํ
- ๋น๋ ํจํด: ๋ณต์กํ ๊ฐ์ฒด ์์ฑ ํ๋ก์ธ์ค ์บก์ํ
- ๊ฐ ํ์
๋ํ:
data class
๋ฅผ ์ด์ฉํ ๋ณตํฉ ๋ฐ์ดํฐ ๊ตฌ์กฐ
5. ๊ณ ๊ธ ์ต์ ํ ๊ธฐ๋ฒ
5.1 ์ง์ฐ ์ด๊ธฐํ ์กฐํฉ
by lazy
์์๊ณผ object
๋ฅผ ๊ฒฐํฉํ๋ฉด ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์ด๊ธฐํ๋ฅผ ํ์ ์์ ์ผ๋ก ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์๊ฐ์ 28% ๋จ์ถํ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
object HeavyResource {
val database: Database by lazy {
connectToDatabase() // ์ค์ ์ ๊ทผ ์ ์ด๊ธฐํ
}
}
5.2 ์ธ๋ผ์ธ ํด๋์ค ํ์ฉ
value class
๋ฅผ ์ด์ฉํ ๊ธฐ๋ณธ ํ์
๋ํ์ ํ์
์์ ์ฑ์ ์ ์งํ๋ฉด์ ๊ฐ์ฒด ์์ฑ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. 2025๋
Kotlin ์ฝ๋ฉ ์ปจ๋ฒค์
์์๋ ๋ชจ๋ DTO์ ID ํ๋์ ์ธ๋ผ์ธ ํด๋์ค ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
@JvmInline value class ProductId(val value: Int)
@JvmInline value class UserId(val value: Int)
fun processOrder(userId: UserId, productId: ProductId) {
// ์ปดํ์ผ๋ฌ ์์ค์ ํ์
๊ฒ์ฆ
}
๊ฒฐ๋ก
Kotlin์ class
์ object
๋ ๊ฐ๊ฐ์ ์ค๊ณ ๋ชฉ์ ์ ๋ง์ถ ์ต์ ์ ํ์ฉ ์๋๋ฆฌ์ค๊ฐ ์กด์ฌํฉ๋๋ค. object
๋ ์ฑ๊ธํค ํจํด๊ณผ ์ ์ ๋ฉค๋ฒ ๊ด๋ฆฌ์ ํ์ํ ํจ์จ์ฑ์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, class
๋ ๋ณต์กํ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง๊ณผ ๋ค์ค ์ธ์คํด์ค ์์ฑ์ ์๊ตฌํ๋ ์ํฉ์์ ํ์์ ์
๋๋ค. ํ๋์ ์ํํธ์จ์ด ์ํคํ
์ฒ์์๋ ๋ ํค์๋์ ํน์ฑ์ ์ ํํ ์ดํดํ๊ณ , ๊ฐ ํ์
์ต์ ํ ๊ธฐ๋ฒ์ ๊ฒฐํฉํด ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ํ์
์์ ์ฑ์ ๋์์ ํ๋ณดํด์ผ ํฉ๋๋ค. ํนํ ๋๊ท๋ชจ ์์คํ
๊ฐ๋ฐ ์ object
์ ๋จ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ์ ์ฆ๊ฐ์ํค๋ฏ๋ก, ์์กด์ฑ ์ฃผ์
ํ๋ ์์ํฌ์์ ์กฐํ๋ก์ด ์ฌ์ฉ์ด ์ค์ํฉ๋๋ค.