-
Object 와 Companion Object 의 차이점에 대해안드로이드 2023. 4. 9. 22:29
Kotlin 에선 Object 선언을 통해 싱글톤 패턴을 구현할 수 있다.
object SampleObject { private const val TEMP = "" }
위 샘플 코드와 같이 싱글톤으로 객체를 생성하고 싶은 클래스에서 object 구문을 이용해 간편하게 싱글톤 패턴을 이용할 수 있는데,
이와 비슷하게 생긴 companion object 라는 녀석이 있다.
companion object 의 사용 방식은 object 와 유사한데, 아래처럼 이용할 수 있다.
SampleClass() { companion object { private const val TEMP = "" } }
사용 방법에서의 object 와 가장 큰 차이점을 꼽자면, object 는 클래스 외부에서 선언하지만 companion object 는 생성자 없이 클래스 내부에서 선언된다는 점을 꼽을 수 있다.
클래서 내부에서 선언되기 때문에, 당연히 클래스의 객체가 새로 생성되면 companion object 내부 객체들도 새로 생성되어 기존에 생성된 객체와 다른 주소값을 갖게 된다.
그럼 차이점을 정리해보자.
1. 객체 초기화 시점
- object : object 클래스 내부 함수가 호출될 때
- companion object : 속해있는 클래스가 로드될 때 (객체 생성 시)
2. 싱글톤 객체 선언 범위
- object : object 클래스 내부 객체 모두
- companion object : 클래스 내부 companion object 구문으로 감싸진 일부 객체
3. Thread Safe 한가?
- object : Yes. jvm 내부적으로 객체 동시 생성을 방지함
- companion object: NO. 클래스의 객체가 여러 개 생성되면 내부 객체 또한 여러 개 생성됨
아무래도 객체 초기화 시점이 다르기 때문에 상황에 맞게 사용할 수 있을 것 같다.
클래스 로드에 대해 공부하다 보니 jvm 의 클래스 로더에 대해서도 알게 되었는데 다음번엔 이를 주제로도 글을 작성해 봐야겠다.
'안드로이드' 카테고리의 다른 글
Kotlin Coroutine (코루틴) 내부 동작원리 (2) 2024.03.26 [Kotlin] Loom 에 대해 (Room 아님) (3) 2023.04.16 sealed class 란? (0) 2023.04.02 [Jetpack Compose] 스낵바 표시, MutableState 사용기법에 대해 (0) 2023.03.18 Firebase Crashlytics 에 대해 (0) 2023.03.05 댓글