1. κ°μ
μλ°μ static μ μΈμ΄ λ¬Έλ²μ΄μ νΉλ³ μ·¨κΈλλ λ©€λ²λ€. μ½νλ¦°μ static ν€μλκ° μλ€. λμ object λΌλ, κ·Έ μμ²΄λ‘ νλμ ν΄λμ€μ΄μ μΈμ€ν΄μ€μΈ κ°λ
μ΄ μλ€. μ μ΄λ κ² κ°λλμ§, companion object κ° static μ μ΄λ»κ² λ체νλμ§, κ·Έλ¦¬κ³ μ΄ μ€κ³κ° μ€μ λ‘ μ£Όλ κ²μ λ³Έλ€.
2. ν΅μ¬ λ΄μ©
2-1. object β μΈμ΄κ° μ§μνλ μ±κΈν€
object Database {
private val connections = mutableListOf<Connection>()
fun connect(): Connection { ... }
}
Database.connect()object λ‘ μ μΈνλ©΄ ν΄λμ€ μ μμ λμμ μΈμ€ν΄μ€κ° λ± νλ μκΈ΄λ€. μλ°μμ μ±κΈν€μ λ§λ€λ €λ©΄ private μμ±μ, private static νλ, getInstance() λ₯Ό μμΌλ‘ λ§μΆκ³ μ€λ λ μμ μ±κΉμ§ μ κ²½ μ¨μΌ νλ€(μ΄ λ°©μμ μ΄μ€ κ²μ¬ λ½νΉ κ°μ ν¨μ λ λ°λΌμ¨λ€). μ½νλ¦°μ object ν€μλ νλλ‘ μ΄κ±Έ μΈμ΄κ° 보μ₯νλ€. μ΄κΈ°νλ μ€λ λ μμ νκ², μ΅μ΄ μ κ·Ό μμ μ μ§μ° μμ±λλ€.
2-2. static μ΄ μλ μ΄μ
μλ°μ static λ©€λ²λ ν΄λμ€μ μνλ©΄μ μΈμ€ν΄μ€μλ 무κ΄νλ€. μ΄ μ΄μ€κ°ν μμΉκ° λ¬Έμ μλ€. static λ©μλλ λ€νμ±μ΄ μκ³ (μ€λ²λΌμ΄λ© μ λ¨), μΈν°νμ΄μ€ ꡬνλ λͺ» νκ³ , λͺ©νΉνκΈ°λ κΉλ€λ‘λ€. μ½νλ¦°μ βν΄λμ€μ μνμ§λ§ μΈμ€ν΄μ€λ μλ λ©€λ²β λΌλ κ°λ
μ체λ₯Ό μμ κ³ , λμ object λ μ¨μ ν κ°μ²΄λ‘ λ§λ€μλ€. object λ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μκ³ , λ€λ₯Έ ν΄λμ€λ₯Ό μμν μ μκ³ , νμνλ©΄ κ·Έ μμ²΄λ‘ κ°μ²λΌ μ λ¬ν μ μλ€. static μ΄ κ°μ§ μ μ½μ΄ μ μ΄μ μλ€.
2-3. companion object β ν΄λμ€ μμ μ μ λ©€λ² μ리
static μ΄ νλ μΌ, μ¦ βν΄λμ€ μ΄λ¦μΌλ‘ λ°λ‘ μ κ·Όνλ λ©€λ²β κ° νμν λκ° μλ€. ν©ν 리 λ©μλ, μμ λ±μ΄λ€. μ½νλ¦°μ ν΄λμ€ μμ companion object λ₯Ό νλ λ μ μκ² νλ€.
class User private constructor(val id: Long, val name: String) {
companion object {
const val MAX_NAME_LENGTH = 50
fun create(name: String): User {
require(name.length <= MAX_NAME_LENGTH)
return User(generateId(), name)
}
}
}
User.create("junho")User.create(...), User.MAX_NAME_LENGTH μ²λΌ ν΄λμ€ μ΄λ¦μΌλ‘ λ°λ‘ μ κ·Όνλ€λ μ μ static κ³Ό κ°μ 보μΈλ€. νμ§λ§ companion object λ μ€μ²΄κ° μλ κ°μ²΄λ€. User.Companion μ΄λΌλ μ΄λ¦μΌλ‘ μ°Έμ‘°ν μ μκ³ , μΈν°νμ΄μ€λ₯Ό ꡬνμν¬ μ μλ€.
interface Factory<T> { fun create(): T }
class Config private constructor() {
companion object : Factory<Config> {
override fun create() = Config()
}
}static μ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμ΄ μλ°μμλ μ΄λ° ν¨ν΄μ΄ μ λλ€. companion object λ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°λ₯νλ€. ν©ν 리 ν¨ν΄μ μ λ€λ¦νκ² λ€λ£° μ μλ€λ λ»μ΄λ€.
2-4. μ΅λͺ
object β μΌνμ© κ΅¬ν체
μ΄λ¦ μλ object λ μλ€. μΈν°νμ΄μ€λ μΆμ ν΄λμ€λ₯Ό κ·Έ μ리μμ μ¦μ ꡬνν λ μ΄λ€.
button.setOnClickListener(object : OnClickListener {
override fun onClick() { println("clicked") }
})μλ°μ μ΅λͺ
ν΄λμ€μ κ°μ μ리μ§λ§, μ΄κ²λ object λΌ μ§μ§ κ°μ²΄λΌλ μ μ κ°λ€.
2-5. μ£Όμν μ β companion object λ ν΄λμ€λΉ νλ
companion object λ ν΄λμ€λ§λ€ μ΅λ νλλ€. μ¬λ¬ static μ νΈ κ·Έλ£Ήμ λλκ³ μΆμΌλ©΄ companion object μμ μ¬λ¬ λ©μλλ₯Ό λκ±°λ, μ΅μμ ν¨μ(νμΌ λ 벨 ν¨μ)λ‘ λΉΌλ κ² λ«λ€. λ companion object μ λ©€λ²λ κ²°κ΅ κ·Έ ν΄λμ€κ° λ‘λλ λ ν¨κ» μ΄κΈ°νλλ λ¨μΌ μΈμ€ν΄μ€μ λ©€λ²μ΄μ§, μλ°μ²λΌ ν΄λμ€ λ©νλ°μ΄ν°μ λ°νλ κ²μ΄ μλλΌλ μ λ λ€λ₯΄λ€. 리νλ μ
μΌλ‘ λ€λ£° λ Companion μ΄λΌλ μ€μ κ°μ²΄κ° νλ λ μλ€λ κ±Έ μμμΌ ν·κ°λ¦¬μ§ μλλ€.
3. λ§λ¬΄λ¦¬
μμ½
objectλ μΈμ΄κ° 보μ₯νλ μ±κΈν€μ΄λ€. μ€λ λ μμ ν μ΄κΈ°νλ₯Ό μ§μ ꡬνν νμκ° μλ€.- μ½νλ¦°μ
staticμ΄ μλ μ΄μ λ βμΈμ€ν΄μ€ μλ ν΄λμ€ λ©€λ²β κ° λ€νμ±Β·μΈν°νμ΄μ€ ꡬνμ΄ μ λλ μ μ½μ μμ κΈ° μν΄μλ€.companion objectλstaticμ리λ₯Ό λμ νμ§λ§ μ€μ²΄κ° μλ κ°μ²΄λΌ μΈν°νμ΄μ€ ꡬν, μ°Έμ‘° μ λ¬μ΄ λλ€.- μ΅λͺ
objectλ μΈν°νμ΄μ€Β·μΆμ ν΄λμ€λ₯Ό κ·Έ μ리μμ μ¦μ ꡬννλ€.companion objectλ ν΄λμ€λΉ νλλΏμ΄λ€. μ¬λ¬ κ·Έλ£Ήμ΄ νμνλ©΄ μ΅μμ ν¨μλ‘ λΆλ¦¬νλ€.