[Kotlin] object는 static인가

Android Developer·2022년 6월 15일

🖊️object


  • singleton
  • 실제로 사용될 때 초기화
  • const val은 static
  • object 내부에 선언되었다고 하여 java의 static은 아님

    const val은 컴파일 시 결정되며 오직 문자열이나 기본 자료형에서만 사용할 수 있다.

✏️class


  • 객체를 여러개 생성할 수 있음

🖋️companion object


  • 클래스가 로드될 때 초기화
  • const val은 static
  • 클래스가 여러번 instance화 되어도 companion object의 객체는 전부 동일한 객체
    (아래 test에서 확인)

🔎companion object test


  • 클래스가 여러번 호출되면 companion object에 선언된 객체도 초기화 되는지 테스트
  • test code
class TestClass {
    companion object {
        var arrayInt = arrayOf(1,2,3,4,5)
    }
}

class MainActivity: AppCompatActivity(){
    private lateinit var a: Array<Int>
    private lateinit var b: Array<Int>
    override fun onCreate() {
    	a=TestClass.arrayInt
    }
    override fun onResume() {
        val c = TestClass()
        val d = TestClass()
    	b=TestClass.arrayInt
        println(a)
        println(++a[4])
        println(b)
        println(RxBusBarcodeData.barcodeString2)
        println(a===b)
        println(c)
        println(d)
        println(++b[4])
    }
}
  • 결과로그
System.out:  [Ljava.lang.Integer;@dbed1a8
System.out:  6
System.out:  [Ljava.lang.Integer;@dbed1a8
System.out:  [Ljava.lang.Integer;@dbed1a8 
System.out:  true
System.out:  com.august.test.TestClass@b2172d 
System.out:  com.august.test.TestClass@8b1c462 
System.out:  7

참고사이트


profile
🌙 TO THE MOON

0개의 댓글