디지털 동반자

[Kotlin] Object와 Companion Object의 차이

Min00 2023. 7. 26. 16:01
더보기

혼자 공부하면서 작성하는 내용입니다!

틀린 점이 있을 수 있어요~ 

로컬 데이터 베이스 관련 코드를 작성할 때 database를 가능하면 싱글톤으로 사용하라는 문구를 보았다.

 

출처 : https://developer.android.com/training/data-storage/room?hl=ko&authuser=1#kotlin

다행히 유니티로 C# 공부를 하면서 싱글톤 디자인이란 뭔지 알고 있었고, kotlin에서는 그걸 Object라는 걸로 선언해서 이용할 수 있다는 것까진 알고 있었다

 

그래서 Database는 따로 만들고 UserDataManager라는 object를 선언해서 데이터 베이스 건드리는 함수를 다 적어서 만드려고 했는데.. 뭔가 이상했다

 

구글링을 하면서 검색해봐도 다 Object를 선언하지 않고

Abstract class인 Database 안에 Companion object를 사용해서 데이터베이스 인스턴스를 만들고 있는 거였다.. 

 

도대체 Companion object 가 뭔데.. 이러고 찾아보면서 혼자 공부한 내용이다.


 

Object 키워드가 선언된 클래스는 인스턴스가 딱 하나만 만들어져서 다른 클래스에서 애를 이용할 때 그냥 object 이름으로 바로바로 접근할 수 있는 것이 큰 장점이다. 이는 그냥 자동으로 생성되어 사용할 수 있게 되는 것이기 때문에 주/부 생성자 모두 이용이 불가하다고 한다. 개발자가 마음대로 생성할 수 있는 친구가 아니기 때문이다.

 

그러면 Companion Object는?

-> 얘도 싱글톤 패턴을 구현하는 키워드인데, "클래스 내부"에서 선언하기 위한 객체 이다. 

즉, companion object를 포함하고 있는 class의 인스턴스 생성 없이 companion object 안의 변수, 함수 들을 호출할 수 있게 되는 것이다. 

 

companion object는 클래스 당 하나만 사용할 수 있고, 생성자를 가질 수 없으며, 실제 객체의 인스턴스로 실행된다고 한다.

 

클래스 내부에서 싱글톤 객체를 만들어서.. 뭔가 자주 접근되지만 바뀌지 않는 메서드들은 companion object 안에 넣어놓고 인스턴스마다 다른 애들은 또 그 밖에 선언하고.. 이런 식으로 사용할 수 있는 듯 하다.

 

근데.. 도대체 데이터 베이스는 왜 companion object로 활용하는 것일까?

 

내가 아직 데베 공부를 안해서.. 정말 모르겠다.. 다음 학기에 꼭 데베 수업을 들어야지..