혼자 공부하면서 작성하는 내용입니다!
틀린 점이 있을 수 있어요~
로컬 데이터 베이스 관련 코드를 작성할 때 database를 가능하면 싱글톤으로 사용하라는 문구를 보았다.
다행히 유니티로 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로 활용하는 것일까?
내가 아직 데베 공부를 안해서.. 정말 모르겠다.. 다음 학기에 꼭 데베 수업을 들어야지..
'디지털 동반자' 카테고리의 다른 글
[Kotlin] 안드로이드 스튜디오 - 파이어베이스 연결 (0) | 2023.07.22 |
---|