[Kotlin] - companion object

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