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)에 올라가 공유됩니다. |