# 1. Language/🔰 Kotlin

Kotlin # Companion Object

둥굴둥굴둥굴레차 2022. 8. 1. 14:27

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

https://medium.com/@lunay0ung/kotlin-object-declaration-%EA%B7%B8%EB%A6%AC%EA%B3%A0-companion-object-feat-static-d5c97c21168