Android

[Kotlin] - companion object

dev_SiWoo 2025. 10. 21. 14:25

Companion Object란 무엇인가?

 

1. java의 static 멤버와 유사한 역할

코틀린은 Java와 달리 static 키워드를 직접지원하지 않는다.

대신 companion ojbect 클래스 레벨의  멤버를 정의하여 Java의 static 변수나 메서드 처럼 사용할 수 있게 하는 방법이 표준이다.

 

 

2. companion object의 핵심 특징 (vs java static과의 비교)

 - Singleton Object  : companion object는 그 자체가 객체이다. 코틀린 컴파일러는 이를 내부적으로 Companion이라는 이름의 싱글톤 객체로 변환한다.

 

- 유연성 : 일반적인 객체처럼 다른 인터페이스를 구현하거나, 클래스를 상속 받을 수  있다. 

 

3. companion object의 메모리

companion object는 static역할은 대신하면서도 객체이기 때문에 heap area 영역에는 해당 객체 자체는 Heap Area에 존재하고

Method Area에는 객체 참조와 클래스 메타데이터가 존재한다.

 

( Method Area에는 Companion 객체를 가리키는 static 참조도 저장됨 )

 

영역 내용 특징
힙 영역(Heap Area) companion ojbect 객체 자체와 val/ var 멤버 클래스가 로드될 때 객체가 생성되어 프로그램 종료 시까지 유지
메서드 영역(Method Area) 클래스 메타데이터, 바이트코드, 상수풀(Constant Pool) 컴파일 시점에 값이 확정되어 클래스 로딩 시 상수 풀(Constant Pool)에 올라가 공유됩니다.