Companion Object(동반자 객체)
Java나 C#과는 달리, 코틀린에는 static 멤버 변수나 함수가 없다.
만약 클래스 인스턴스없이 어떤 클래스 내부에 접근하고 싶다면,
클래스 내부에 객체를 선언할 때 companion식별자를 붙인 object를 선언하면 된다.
companion object를 선언하면 클래스 이름을 식별자로 사용함으로써
Java나 C#에서 static 메소드를 호출했던 것과 같이 해당 객체를 사용할 수 있다.
companion object는 어떤 클래스의 모든 인스턴스가 공유하는 객체를 만들고 싶을 때 사용하며,
클래스당 한 개만 가질 수 있다.
class MyClass {
companion object Shop {
fun create(): MyClass = Myclass()
}
}
그리고 아래와 같은 형태로 부를 수 있다.
val instance = MyClass.Shop.create()
또한 companion object의 이름은 생략될 수 있으며
그럴 때엔 Companion이란 식별자를 사용할 수 있다.
class MyClass {
companion object { }
}
그리고 아래와 같은 형태로 부를 수 있다
val instance = MyClass.Companion
만약 companion object밖의 일반함수를 호출하기 위해서는 생성자를 호출한 다음 변수에 저장한 뒤 사용할 수 있다.
다음의 예시를 살펴보자.
class Pig{
companion object {
var name: String = "이름"
fun myNameIs() {
Log.d("class", "Pig의 이름은 ${name}입니다.")
}
}
fun walk() {
Log.d("class", "Pig가 걸어갑니다.")
}
}
위와 같은 경우에서 companion object안의 변수와 함수는 여전히 아래와 같이 호출할 수 있다.
Pig.Companion.name = "Linda"
Pig.myNameIs()
그러나 companion object 밖의 코드는 다음과 같이 변수에 저장한 후 호출할 수 있다.
val cutePig = Pig()
cutePig.walk()
REFERENCE
'# 1. Language > 🔰 Kotlin' 카테고리의 다른 글
Android개발 시 데이터 바인딩이란? (0) | 2022.09.03 |
---|---|
[Android/Kotlin] 블루투스 목록 PJT -1. 데이터 바인딩하여 버튼 클릭 시 Toast메세지 출력하기 (0) | 2022.09.02 |
Kotlin # Android 전체에서 context에 접근할 수 있도록 만들기 (0) | 2022.08.01 |
Kotlin # Context (0) | 2022.07.26 |
Kotlin # Intent (0) | 2022.07.26 |