ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 의 클래스 로더에 대해서도 알게 되었는데 다음번엔 이를 주제로도 글을 작성해 봐야겠다.

    댓글

Designed by Tistory.