본문 바로가기

# 02/코틀린

[Kotlin] Companion Object

반응형

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