ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] Companion
    Kotlin 2022. 9. 14. 15:48

    자바에서 static으로 사용되던 키워드가 companion이라는 키워도로 바꿔서 사용됨.

    다만 static은 각 변수나 메서드에 각각 붙여서 사용하지만 companion은 영역을 만들고 그 안에 정적 멤버로 사용할 변수나 메서드를 다 넣음.

    fun main(){
        // 인스턴스 멤버변수 또는 인스턴스 멤버 메서드의 가장 큰 특징은
        // 객체가 생성되지 않으면, 사용할수가 없음
        val obj1 = TestClass()
        println("obj1.a1 : ${obj1.a1}")
        obj1.testFun1()
        obj1.a1 = 200
        println("obj1.a1 : ${obj1.a1}")
    
        // companion 영역에 선언된 멤버들은 객체 생성없이, '클래스 이름과 함께 바로 사용'이 가능
        println("TestClass.a2 : ${TestClass.a2}")
        TestClass.testFun2()
    }
    class TestClass {
        var a1 = 100  // 인스턴스 멤버 변수
        companion object {  // 정적(static) 멤버들이 정의 되는 영역
            var a2 = 1000   // 정적(static) 멤버 변수
            fun testFun2() {   // 정적(static) 멤버 매서드
                println("testFun2")
                // println ("a1 : $a1")  // error
                // 인스턴트 멤버는 companion 메서드에 접근할 수 없음
                println("a2 : $a2")  // 정적 멤버 메서들에서는 정적 멤버 변수의 접근이 자유로움
            }
        }
        fun testFun1(){  // 인스턴스 멤버 메서드
            println("testFun1")
            println("a1 : $a1")
            println("a2 : $a2")// 인스턴스 메서드는 객체유무와 상관없이 언제든 사용이 가능
            testFun2()
        }
    }

    'Kotlin' 카테고리의 다른 글

    [Kotlin] List  (0) 2022.09.14
    [Kotlin] TypeCasting  (0) 2022.09.14
    [Kotlin] Interface  (0) 2022.09.14
    [Kotlin] Abstract  (0) 2022.09.14
    [Kotlin] this, super  (0) 2022.09.14

    댓글

Designed by Tistory.