Companion Object
- class 내에 정의할 수 있음
- Java에서처럼 Class.TYPE 형태로 직접 접근 가능
- static은 아님
-> class 내에 직접 접근을 위한 함수와 변수 정의
class Sample {
val name : String = "Name"
companion object {
val type : Int = 0
fun isTypeZero() : Boolean {
return type == 0
}
}
}
자바에서는 Sample.companion.getType(), Sample.companion.isTypeZero() 로 접근 할 수 있다.
코틀린에서는 Sample.type, Sample.isTypeZero() 로 직접 접근할 수 있다.
interface와 함께 사용하기
interface Base {
val name : String
fun newDefaultMethod ()
companion object {
val TYPE : Int = 0
fun isTypeZero() : Boolean {
return TYPE == 0
}
}
}
companion object - 접근하기
-> kotlin에서 접근
// 변수 접근
Base.TYPE
// function 접근
Base.isTypeZero()
-> java에서 접근
// 변수 접근
Base.Companion.getTYPE();
// function 접근
Base.Companion.isTypeZero();
- Companion 사용하지 않고, java static 변수처럼 접근하려면?
- 변수 : const/@JvmField
- function : @JvmStatic
class Base {
companion object {
const val TYPE : Int = 0
@JvmField val NAME : String = "Name"
@JvmStatic fun isTypeZero() : Boolean {
return TYPE == 0
}
}
}
// 자바에서도 Base.TYPE, Base.NAME, Base.isTypeZero()로 접근 가능!!
interface Sample2 { // interface 일 때는 const로만 접근 가능 @JvmField, @JvmStatic 에러뜸
companion object {
const val type : Int = 0
const val NAME : String = ""
fun isTypeZero() : Boolean {
return type == 0
}
}
}
-> kotlin에서 접근
// 변수 접근
Base.TYPE
// function 접근
Base.isTypeZero()
-> java에서 접근
// 변수 접근
//Base.Companion.getTYPE();
Base.TYPE;
// function 접근 - 둘 다 가능
Base.Companion.isTypeZero();
Base,isTypeZero();
companion object - 이름 지정 가능
class MyClass {
companion object Factory {
fun create() : MyClass = MyClass()
}
}
-> kotlin에서 접근 시
MyClass.create()
-> java에서 접근 시 : Companion을 대신하여
MyClass.Factory.create()
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Class etc (0) | 2019.07.12 |
---|---|
[Kotlin] Sealed Classes (0) | 2019.07.12 |
[Kotlin] Class initializer (0) | 2019.07.12 |
[Kotlin] Class Inheritance (0) | 2019.07.11 |
[Kotlin] Null 예외처리 - etc (0) | 2019.07.11 |